要实现增量备份,要用到 pg 提供的 Point-in-Time Recovery (PITR),wal 文件相当于pg 执行操作的记录文件,有了 wal 就可以重现当时的操作,所以只要有一个基础的备份,在加上从这个时间点开始的 wal,就可以恢复到任意时刻的数据库,不小心把数据库删了也能恢复
一. 备份
1. 制作基础库
1.a 自己备份
先告诉数据库我要开始备份了,然后拷贝完整的数据库到一个新的位置,然后告诉数据库我结束备份了。我是用了阿里云的一个云盘,优点就是命令简单,速度快,这个盘可以卸载下来,挂在到任意机器上,缺点就是必须在同一可用区,假如阿里云这个区受到恐怖袭击拿数据也取不回来了
1.b pg_basebackup
pg_basebackup, 这个可以自动化帮你做了很多事情,我选择第一种方案,用 rsync, 之所以这样是因为我数据库比较大, pg_basebackup 每次都要一次完整的备份,做不到增量, rsync 拷贝过的就不用再拷贝了(如果有 pg_basebackup 能做到增量还请大家指正)时间短一些
2. 备份 wal
通过配置 postgresql.conf 里面的 archive_command 实现,就是把生成的 wal 拷贝到一个目录
二. 恢复系统
在新的机器上把 数据目录指向刚才的基础备份的位置,然后在 recovery.conf 里面配置 restore_command 告诉数据哪里可以找到 wal 就可以了
具体操作主要参考
PostgreSQL 最佳实践 - 在线增量备份与任意时间点恢复
网友评论