东平可信的网站建设,网站建设 响应式,开封建设网站,什么是软文营销文章目录 PostgreSQL简介业务场景数据库维护docker-compose配置备份脚本更新表结构脚本 PostgreSQL简介
PostgreSQL是一种开源的关系型数据库管理系统#xff0c;它是一个功能强大、高度可定制化和支持复杂应用的数据库。它支持广泛的数据类型#xff0c;包括数值、文字、二… 文章目录 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.2container_name: postgresports:- 5432:5432volumes:- ./volumes/postgresql/:/var/lib/postgresql/data/- /etc/localtime:/etc/localtimeenvironment:- POSTGRES_USERpostgres- POSTGRES_PASSWORDxxxxxxxx- POSTGRES_HOST_AUTH_METHODmd5- TZAsia/Shanghairestart: always主要是需要把PostgreSQL数据库存放数据的data目录映射出来其他都是通用配置用户名、密码、密码访问、时区等数据目录映射出来也方便做数据的全量备份与恢复。
备份脚本
可以使用定时任务在每天凌晨直接对映射出来的文件夹进行压缩备份到其他目录下面是备份脚本pg-backup.sh只保留10天的备份循环删除最早的一天
#!/bin/bashecho start backup pg data # pg 数据目录
pgdata/home/signal/instance/volumes
target/home/bak/pgbakif [ ! -d $target ];thenmkdir -p $target
elseecho 文件夹已经存在
fi# 当前日期
curDay$(date %Y-%m-%d)
echo ${curDay}
# 保留文件数
ReservedNum10# 去pg 数据目录按日期压缩到备份文件夹
cd $pgdata
tar -zcvf $target/postgresql-$curDay.tgz postgresql
# 删除多余天数的压缩文件
#*.tgz表示筛选文件类型去掉则针对整个目录的文件
cd $target
FileNum$(ls -l ./*.tgz |grep ^- |wc -l)
while(( FileNum $ReservedNum))
doOldFile$(ls -rt ./*.tgz| head -1)rm -f $OldFilelet FileNum--
doneecho 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即可