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();

PostgreSQL-PITR 增量备份与恢复_recovery

2 生成基本备份

在这里的基本备份,在原库中有一张测试表存在。

pg_basebackup 的相关参数选项,可查看帮助。

# 生成基础备份
pg_basebackup -Fp -P -v -D pgdata_bak
# 查看 txid
select txid_current();
# 检验备份完整性
pg_verifybackup pgdata_bak/
backup successfully verified

PostgreSQL-PITR 增量备份与恢复_Point-in-Time Recove_02

3 原库数据操作

插入新数据,并删除表;同时在插入前后,记录 txid 信息,切换一次 wal 日志。

PostgreSQL-PITR 增量备份与恢复_PITR_03

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 可读写连接

PostgreSQL-PITR 增量备份与恢复_restore_04

5 启动备份恢复数据

停止原库,生成 recovery.signal,启动备份。

备份启动成功,说明恢复成功。

# 生成 recovery.signal
touch recovery.signal

PostgreSQL-PITR 增量备份与恢复_recovery_05