问题
现在需要从docker容器中备份整个postgresql后,然后,使用备份文件在另外一个pg的docker容器中恢复过来。
步骤
备份旧容器中的pg
# 登录到旧的pg容器中 docker exec -it postgres bash # 备份数据库 pg_dumpall -c -u postgres > dump_`date +%y-%m-%d"_"%h_%m_%s`.sql # 退出容器 exit # 退出容器后,复制出备份文件到主机中 docker cp postgres:/dump_2024-10-26_05_58_04.sql dump_2024-10-26_05_58_04.sql
这里主要是用pg_dumpall
备份整个pg实例,具体命令解释如下:
-c
:备份的sql文件中包含drop语句;-u
: 数据库用户名。
创建新的pg容器
准备好备份文件之后,然后,停止老的pg容器,创建新的pg容器。
# 停止老的pg容器 docker stop postgres # 创建新的pg容器 docker run --name postgres2 -e postgres_password=<密码> -p 5432:5432 -d postgres -c max_connections=800
恢复数据
# 复制备份数据文件到新pg容器中 docker cp dump_2024-10-26_05_58_04.sql postgres2:/ # 登录到新pg容器中 docker exec -it postgres2 bash # 恢复备份数据库 psql -f dump_2024-10-26_05_58_04.sql -u postgres postgres
收尾
新pg容器没问题后,可以删除旧pg容器,然后,更名新pg容器即可。
# 删除旧pg容器 docker rm postgres # 改名老pg容器 docker rename postgres2 postgres
拓展:定时备份docker部署的postgresql数据库
注:系统必须已安装docker和docker-compose
一、postgresql备份脚本
1. 备份脚本
# vi /opt/postgresql/conf/backup/pg_backup.sh #!/bin/bash # 设置数据库连接参数 db_host="localhost" db_port="5432" db_name="pgdb" db_user="root" db_pass="admin@123" # 设置备份目录 backup_dir="/mnt" # 获取当前时间戳 timestamp=$(date +"%y%m%d%h%m%s") # 设置备份文件名 backup_file="$backup_dir/backup_$db_name_$timestamp.sql" # 使用 pg_dump 命令备份数据库 pg_dump -h $db_host -p $db_port -u $db_user -d $db_name -fc -b -v -f "$backup_file" # 检查备份是否成功,并导出备份日志 if [ $? -eq 0 ]; then echo "$timestamp backup completed successfully: $backup_file" >> /mnt/pg_backup.log else echo "$timestamp backup failed." >> /mnt/pg_backuo.log fi # 检查并删除十天前的备份文件 find "$backup_dir" -type f -name "$db_name_*.sql" -mtime +10 -exec rm {} \; echo "$timestamp backup completed and old backups cleaned up." >> /mnt/pg_backup.log
2.添加执行权限
chmod +x /opt/postgresql/conf/backup/pg_backup.sh
二、 部署postgresql
1. 使用docker-compos部署pg
# vi /opt/postgresql version: "3" services: postgresql: image: postgres:16.3-alpine restart: always privileged: true environment: postgres_user: root postgres_password: admin@123 postgres_db: pgdb ports: - 5432:5432 volumes: - ./conf/postgres/data:/var/lib/postgresql/data - ./conf/backup:/mnt #备份脚本和备份文件存放目录
2. 启动postgresql
# cd /opt/ postgresql # docker-compose up -d
三、 计划任务自动备份
1. 设置计划任务
# 每天凌晨一点自动执行数据库备份脚本 # crontab -l 0 1 * * * docker exec postgresql /bin/bash -c "/mnt/pg_backup.sh"
总结
到此docker迁移pg还是挺容易的。这里少了一个pg容器应当映射到持久化磁盘中,这点不要学我,以后,有机会再说吧。
到此这篇关于从docker容器中备份整个postgresql的操作步骤的文章就介绍到这了,更多相关docker备份postgresql内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论