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 进一步压缩备份文件。
  • 备份文件建议异地存储,防止服务器故障导致数据丢失。

上一篇      下一篇