PostgreSQL数据库备份还原

备份


PostgreSQL数据库备份推荐使用自带的pg_dump,类似Mysql的mysqldump,以下命令为备份数据库并压缩:

1
pg_dump --username=postgres --host=localhost --dbname=DATABASE | xz -9 > DATABASE.sql.xz

也可以使用pg_dumpall命令把所有数据库都dump出来:

1
pg_dumpall --username=postgres --host=localhost | xz -9 > DATABASE.sql.xz

还原


还原使用psql命令还原:

1
unxz -c DATABASE.sql.xz | psql -U 用户名 -h localhost DATABASE

备份脚本


创建备份脚本dbbackup.sh,使用crontab来每日调用一次,实现自动备份数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
#备份文件存放路径
backup_file_path="/your/dbbackup/path/"
cur_date=$(date +"%Y%m%d_%H%M")


echo "[$(date +'%Y-%m-%d %H:%M:%S')]Start Backup."
pg_dumpall --username=postgres --host=localhost | xz -9 > ${backup_file_path}${cur_date}-DATABASE.sql.xz

echo "[$(date +'%Y-%m-%d %H:%M:%S')]Backup Done."

#查找30天前的历史备份数据并删除,历史数据保留30天
find "${backup_file_path}" -maxdepth 1 -name "*.sql.xz" -daystart -mtime +30 -delete

给dbbackup.sh添加可执行权限:

1
chmod +x dbbackup.sh

最后在crontab中设置自动执行备份脚本:

1
0 0 * * * /your/dbbackup/path/dbbackup.sh