docker运行PostgreSQL数据库维护执行脚本备份数据库与更新表结构的方法

 更新时间:2023年05月04日 17:16:38   作者:坚持是一种态度  
这篇文章主要介绍了docker运行PostgreSQL数据库维护,执行脚本备份数据库与更新表结构,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

PostgreSQL简介

  • PostgreSQL是一种开源的关系型数据库管理系统,它是一个功能强大、高度可定制化和支持复杂应用的数据库。它支持广泛的数据类型,包括数值、文字、二进制、地理空间等多种类型,同时还拥有高级数据建模和表连接等功能。PostgreSQL是使用ANSI SQL标准的一种数据库,也支持JSON、XML等多种数据格式。
  • PostgreSQL 是一个功能强大、可靠性高、丰富性强的数据库管理系统,广泛应用于大型企业和各类应用程序。
  • 在开源界,PostgreSQL得到了广泛的认可和支持,并且在全球范围内有着庞大的社区和开发者团队。它是一种成熟的数据库技术,也是当今最具活力和发展潜力的开源数据库之一。

业务场景

  • 我们有一小部分客户,项目涉及路口较少,本身对平台的需求较少,对平台并发量也没啥要求
  • 另一方面,也是比较重要的原因,他们没有买新服务器的预算,只会提供给我们一台比较老的windows server服务器,用来部署平台
  • 为了部署和运维方便,我们会将所有微服务和中间件,使用docker部署,使用docker-compose统一管理配置文件
  • 在windows机器上安装virtualBox,在里面安装CentOS7虚拟机,在虚拟机里部署平台(数据库也使用了docker部署)
  • 客户是内网环境,后续更新部署时,主要是整理好部署包和更新脚本,当地维保配合更新。这时出现了一个问题,有时候需要修改表结构,当地维保人员不会操作(其实他们主要是使用平台帮客户干活,不是专业运维)
  • 现在需要在原有的程序更新脚本里,把数据库结构更新过程放进去,使维保人员只需要执行一个脚本即可完成更新
  • 对于一个生产环境,数据库的备份策略是必要的,至少要做到每天备份一次。由于我们只有业务数据存储在PostgreSQL,整体数据量不大,所以采用全量备份

数据库维护

docker-compose配置

  • 首先放一下我们的PostgreSQL的docker-compose配置
  # 数据库服务
  postgresql:
    image: postgres:14.2
    container_name: postgres
    ports:
      - 5432:5432
    volumes:
      - ./volumes/postgresql/:/var/lib/postgresql/data/
      - /etc/localtime:/etc/localtime
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=xxxxxxxx
      - POSTGRES_HOST_AUTH_METHOD=md5
      - TZ=Asia/Shanghai
    restart: always

  • 主要是需要把PostgreSQL数据库存放数据的data目录映射出来,其他都是通用配置,用户名、密码、密码访问、时区等
  • 数据目录映射出来,也方便做数据的全量备份与恢复。

备份脚本

  • 可以使用定时任务,在每天凌晨直接对映射出来的文件夹,进行压缩备份到其他目录
  • 下面是备份脚本pg-backup.sh,只保留10天的备份,循环删除最早的一天
#!/bin/bash
echo "======== start backup pg data ========"
# pg 数据目录
pgdata=/home/signal/instance/volumes
target=/home/bak/pgbak
if [ ! -d $target ];then
    mkdir -p $target
else
    echo "文件夹已经存在"
fi
# 当前日期
curDay=$(date "+%Y-%m-%d")
echo ${curDay}
# 保留文件数
ReservedNum=10
# 去pg 数据目录,按日期压缩到备份文件夹
cd $pgdata
tar -zcvf $target/postgresql-$curDay.tgz postgresql
# 删除多余天数的压缩文件
#*.tgz表示筛选文件类型,去掉则针对整个目录的文件
cd $target
FileNum=$(ls -l  ./*.tgz |grep ^- |wc -l)
while(( FileNum > $ReservedNum))
do
	OldFile=$(ls -rt  ./*.tgz| head -1)
	rm -f $OldFile
	let "FileNum--"
done
echo "======== bakup pg data end ========"
  • 然后将脚本加入服务器定时执行即可,可以直接使用crontab

更新表结构脚本

  • docker是可以执行sh脚本的,使用docker exec 容器name/id /bin/sh -c "命令"即可
  • 在原有的程序更新脚本里,加入数据库更新命令即可,具体命令如下:
echo "更新postgresql表结构"
docker exec postgres /bin/sh -c "sh /var/lib/postgresql/data/db_update.sh"
  • 其中/var/lib/postgresql/data/db_update.sh是数据库更新脚本,使用psql 命令执行SQL文件,具体如下:
#!/bin/bash
# 以postgres用户 执行此脚本 更新数据库
echo 'update database'
psql -d core -U postgres -f /var/lib/postgresql/data/core_update.sql
sleep 1s
echo 'create update end'
exit
  • 其中/var/lib/postgresql/data/core_update.sql为具体的SQL文件
  • 由于/var/lib/postgresql/data文件夹已经映射出来了,更新部署程序时,顺便更新core_update.sql即可

到此这篇关于docker运行PostgreSQL数据库维护执行脚本备份数据库与更新表结构的文章就介绍到这了,更多相关docker运行PostgreSQL数据库内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 使用Docker快速安装grafana的基本步骤

    使用Docker快速安装grafana的基本步骤

    Grafana 是一个强大的开源监控和数据分析平台,它能够与各种数据源集成,并提供灵活的可视化和仪表盘功能,下面给大家分享Docker 中安装 Grafana 的基本步骤,感兴趣的朋友一起看看吧
    2024-01-01
  • 解决docker容器启动后马上退出的问题

    解决docker容器启动后马上退出的问题

    这篇文章主要介绍了解决docker容器启动后马上退出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker容器安装Vim编辑器的方法

    Docker容器安装Vim编辑器的方法

    Docker容器是一种轻量级、可移植的应用程序打包解决方案,在本文中,我们将讨论如何在Docker容器中安装Vim编辑器,为容器增添一个功能强大的文本编辑器,感兴趣的朋友跟随小编一起看看吧
    2023-08-08
  • docker 在容器外执行某个容器内的某个命令操作

    docker 在容器外执行某个容器内的某个命令操作

    这篇文章主要介绍了docker 在容器外执行某个容器内的某个命令操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker官方mysql镜像自定义配置详解

    docker官方mysql镜像自定义配置详解

    这篇文章主要介绍了docker官方mysql镜像自定义配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • Ubuntu 16.04中Docker的安装和代理配置教程

    Ubuntu 16.04中Docker的安装和代理配置教程

    这篇文章主要给大家介绍了在Ubuntu 16.04中Docker的安装和代理配置的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。
    2017-05-05
  • docker打包python镜像的全教程分享

    docker打包python镜像的全教程分享

    Docker是一种开源的容器化平台,可以让开发者将应用程序和其依赖项打包到一个可移植的容器中,然后在不同的环境中运行,本文主要给大家介绍了docker打包python镜像全教程,需要的朋友可以参考下
    2024-02-02
  • Docker+keepalived+nginx实现主从热备的方法示例

    Docker+keepalived+nginx实现主从热备的方法示例

    这篇文章主要介绍了Docker+keepalived+nginx实现主从热备的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • docker中的run/cmd/entrypoint的区别详解

    docker中的run/cmd/entrypoint的区别详解

    Dockerfile中run、cmd和entrypoint都能够用于执行命令,针对每个命令给他介绍详细用途,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • docker部署mysql后无法连接的解决方式

    docker部署mysql后无法连接的解决方式

    最近在在docker中安装了mysql后,去连接的时候出现错误,下面这篇文章主要给大家介绍了关于docker部署mysql后无法连接的解决方式,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-08-08

最新评论

?


http://www.vxiaotou.com