Docker中PostgreSQL数据库的备份方法总结
学习笔记作者:admin日期:2025-06-30点击:170
摘要:本文介绍了在Docker环境中如何对PostgreSQL数据库进行备份,包括使用pg_dump、挂载卷和脚本定时备份等方法,并提供了恢复操作的步骤。
一、推荐方法:使用 pg_dump 备份容器内的数据库
docker exec -t <容器名或容器ID> pg_dump -U <用户名> -Fc <数据库名> > backup.dump示例:
docker exec -t pg_container pg_dump -U postgres -Fc mydb > mydb_backup.dump      - -Fc 表示输出为自定义格式(适合大数据库,支持压缩和恢复特定表)
- 如果你只是需要 SQL 格式备份,可以去掉 -Fc,改为重定向 .sql 文件。
二、通过挂载卷 + 脚本定时备份(推荐用于生产)
1. 创建备份脚本(例如 backup.sh):
#!/bin/bash
BACKUP_DIR="/backup/postgres"
DATE=$(date +"%Y%m%d%H%M")
PG_CONTAINER="pg_container"
DB_USER="postgres"
mkdir -p $BACKUP_DIR
docker exec -t $PG_CONTAINER pg_dump -U $DB_USER -Fc mydb > $BACKUP_DIR/mydb_$DATE.dump2. 添加可执行权限并运行:
chmod +x backup.sh
./backup.sh3. 配置 crontab 定时任务(每天凌晨2点备份):
crontab -e添加如下行:
0 2 * * * /path/to/backup.sh三、直接备份整个数据卷(适用于紧急恢复)
docker cp pg_container:/var/lib/postgresql/data ./pg_data_backup或者直接压缩容器中的数据目录:
docker exec -t pg_container tar cvfz /tmp/backup.tar.gz /var/lib/postgresql/data
docker cp pg_container:/tmp/backup.tar.gz ./backup.tar.gz⚠️ 注意:这种方式是冷备份,可能不一致,除非你停止数据库服务后再操作。
四、恢复备份的方法
1. 恢复 .dump 文件(使用 pg_restore):
docker exec -i pg_container pg_restore -U postgres -C -d postgres < mydb_backup.dump      - -C 表示创建数据库
- -d 后面跟的是连接的目标数据库(通常是 postgres)
2. 恢复 .sql 文件:
docker exec -i pg_container psql -U postgres -d mydb < mydb_backup.sql五、小贴士
- 建议在非高峰期执行备份。
- 使用 -Fc的备份可以用pg_restore精确恢复某个表。
- 可以结合 gzip进一步压缩备份文件。
- 备份文件建议异地存储,防止服务器故障导致数据丢失。