增量更新备份
增量更新备份
在备用配置中,可以将定期基础备份的开销从主服务器转移到备用服务器;相反,基础备份可以通过备份备用服务器的文件来完成。这个概念通常被称为增量更新备份、日志变更累积,或者更简单的,变更累积。
停止备用服务器
如果我们对备用服务器的数据目录进行有效的文件系统备份,我们将能够使用该新备份来创建新的备用服务器,或用于主服务器的持续存档恢复。然后我们不再需要保留新的备份之前的 WAL 文件。如果需要恢复,从增量更新备份恢复将比从原始基础备份恢复更快。
获取备用服务器的有效文件系统备份的最简单方法是完全停止备用服务器(例如,使用 pg_ctl stop
,并验证它确实停止了),对其进行冷文件系统备份以及 WAL 存档目录,然后重启备用服务器。
要检查服务器是否真的停止了,可以执行以下操作
pg_controldata /path/to/data | grep "Database cluster state: *shut down" >/dev/null if [ $? -ne 0 ]; then # do some error handling fi
不停止备用服务器
如果停止备用服务器不可取(例如,因为它是热备用,或者因为如果主服务器发生故障,它将需要很长时间才能恢复),则可以在它仍然处理从主服务器发送的日志时进行文件系统备份。但是,此过程非常复杂,必须仔细执行,否则备份将无效。步骤如下:
1. 在主服务器上执行 pg_start_backup(),记录报告的 WAL 文件名和偏移量。
2. 将备份标签文件从主服务器的数据目录复制到临时位置。
cp /path/to/master/backup_label /tmp
3. 在备用服务器上运行 pg_controldata,并等待 “Latest checkpoint’s REDO location” 等于或超过 pg_start_backup() 报告的 WAL 信息。您可能需要在主服务器上调用 pg_switch_xlog() 来强制将所需的 WAL 文件发送到备用服务器。
4. 对备用服务器的数据目录执行文件系统备份。
5. 在主服务器上执行 pg_stop_backup()。
6. 将保存的备份标签文件移动到新的备份目录。
mv /tmp/backup_label /path/to/new_backup
现有实现
[https://github.com/omniti-labs/omnipitr
OmniPITR] set of tools for WAL replication does backups on slave server using similar technique, but without running any queries on master server. Instead it gets necessary information using pg_controldata calls on slave, and it builds backup_label (and backup "segment") files on its own.