当前位置: 代码网 > 服务器>服务器>云虚拟主机 > 从Docker容器中备份整个PostgreSQL的操作步骤

从Docker容器中备份整个PostgreSQL的操作步骤

2024年11月26日 云虚拟主机 我要评论
问题现在需要从docker容器中备份整个postgresql后,然后,使用备份文件在另外一个pg的docker容器中恢复过来。步骤备份旧容器中的pg# 登录到旧的pg容器中docker exec -i

问题

现在需要从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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com