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

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/
目录PostgreSQL简介业务场景数据库维护docker-compose配置备份脚本更新表结构脚本

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即可
免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容