PostgreSQL 备份数据库
备份 PostgreSQL 数据库可以通过以下几种方式实现,根据需求选择合适的方法:
1. 使用 pg_dump
工具
pg_dump
是 PostgreSQL 自带的工具,可以备份单个数据库。
命令:
pg_dump -U <用户名> -h <主机> -p <端口> <数据库名> > <备份文件名>.sql
示例:
pg_dump -U postgres -h localhost -p 5432 mydb > mydb_backup.sql
参数说明:
-U
:指定 PostgreSQL 用户名。
-h
:数据库服务器地址(如本地为 localhost
)。
-p
:端口号(默认 5432
)。
<数据库名>
:要备份的数据库名。
> <备份文件名>
:将输出保存为 .sql
文件。
2. 使用 pg_dumpall
工具
如果需要备份整个 PostgreSQL 实例的所有数据库,可以使用 pg_dumpall
。
命令:
pg_dumpall -U <用户名> -h <主机> -p <端口> > <备份文件名>.sql
示例:
pg_dumpall -U postgres -h localhost -p 5432 > all_databases_backup.sql
这会生成一个包含所有数据库的 SQL 文件。
3. 使用 pg_basebackup
(物理备份)
pg_basebackup
是 PostgreSQL 提供的物理备份工具,适用于基于文件系统的备份(例如热备份)。
命令:
pg_basebackup -U <用户名> -h <主机> -D <备份目录> -Fp -Xs -P
示例:
pg_basebackup -U postgres -h localhost -D /backup/mydb -Fp -Xs -P
参数说明:
-D
:指定备份存储目录。
-Fp
:选择文件格式备份。
-Xs
:包含 WAL 日志。
-P
:显示备份进度。
4. 定时备份(使用脚本)
可以将备份命令加入脚本并通过 cron
定时任务定期备份。
示例脚本(备份单个数据库):
#!/bin/bash
# 配置变量
USER="postgres"
HOST="localhost"
PORT="5432"
DBNAME="mydb"
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
# 备份文件路径
BACKUP_FILE="$BACKUP_DIR/${DBNAME}_backup_$DATE.sql"
# 执行备份
pg_dump -U $USER -h $HOST -p $PORT $DBNAME > $BACKUP_FILE
# 检查是否成功
if [ $? -eq 0 ]; then
echo "Backup successful: $BACKUP_FILE"
else
echo "Backup failed"
fi
定时任务添加:
crontab -e
添加任务(每天凌晨 2 点备份):
0 2 * * * /path/to/backup_script.sh
5. 还原备份
对于 pg_dump
的备份文件:
psql -U <用户名> -h <主机> -d <数据库名> -f <备份文件名>.sql
示例:
psql -U postgres -h localhost -d mydb -f mydb_backup.sql
对于 pg_dumpall
的备份文件:
psql -U <用户名> -h <主机> -f <备份文件名>.sql
选择方法时需要考虑数据库大小、备份频率和恢复需求。pg_dump
适合小型数据库,pg_basebackup
更适合大规模或高可用场景。