Docker中PostgreSQL数据库的备份方法总结
学习笔记作者:admin日期:2025-06-30点击:10
摘要:本文介绍了在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.dump
2. 添加可执行权限并运行:
chmod +x backup.sh
./backup.sh
3. 配置 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
进一步压缩备份文件。 - 备份文件建议异地存储,防止服务器故障导致数据丢失。