Point-in-Time Recovery (PITR) 基于时间点的备份(恢复)。
归档对于PITR(增量备份与恢复)至关重要,如果归档不一致,会产生各种各样的问题。以下的测试截图中,我将归档清零,重新生成,再做相关PITR的操作。这里是简单的操作过程,详情查看相关的官方文档说明 26.3. Continuous Archiving and Point-in-Time Recovery (PITR) 。另外推荐阅读 Base Backup & Point-in-Time Recovery。
1 (重新)开启归档
这里,重新开启归档,是先将归档停用,然后删除归档,再开启归档。
停用归档,是将 archive_mode 置为 off ; 将 archive_command 置为 ''。
删除归档,是将设定的归档目录下的所有归档文件清空。
开启归档,是将原有配置还原,并重启 PostgreSQL 数据库,并切换一次WAL日志,此时在归档目录中,会生成相关的归档记录。
# 配置 postgresql.conf
archive_mode = on/off
archive_command = 'cp -i %p /pgccc/archive/%f' / ''
# 切换 wal 日志
select pg_switch_wal();
2 生成基本备份
在这里的基本备份,在原库中有一张测试表存在。
pg_basebackup 的相关参数选项,可查看帮助。
# 生成基础备份
pg_basebackup -Fp -P -v -D pgdata_bak
# 查看 txid
select txid_current();
# 检验备份完整性
pg_verifybackup pgdata_bak/
backup successfully verified
3 原库数据操作
插入新数据,并删除表;同时在插入前后,记录 txid 信息,切换一次 wal 日志。
4 修改备份配置
在这里,主要修改备份的4个配置:
# 配置 postgresql.conf
cd /home/postgres/pgdata_bak/postgresql.conf --备份的配置文件目录
restore_command = 'cp /pgccc/archive/%f %p' --要恢复的文件路径,拷贝原库归档
recovery_target_xid = '1980' --删除前的 txid
recovery_target_action = 'pause' --pause 只读连接 --promote 可读写连接
5 启动备份恢复数据
停止原库,生成 recovery.signal,启动备份。
备份启动成功,说明恢复成功。
# 生成 recovery.signal
touch recovery.signal