PostgreSQL Replication之第四章 设置异步复制(6)

时间:2023-12-18 14:31:26

4.6 有效的清理和恢复结束

最近几年, recovery.conf 已经变得越来越强大了。早在初期(在 PostgreSQL 9.0之前), 仅有 restore_command 和一些 recovery_target_time 相关设置。更多的现代 PostgreSQL 版本提供了更多的东西,让您有机会以一个很好和专业的方式控制您的重放进程。

在本节中,您将学习有什么样的设置,您将怎样轻松地使用这些功能。

4.6.1 取得重启点的控制权

到现在为止,我们已经无限地归档了XLOG。就像在现实生活中,无限是一个引起麻烦的概念。正如John Maynard Keynes已经在他著名的书中所陈述,The General Theory of Employment, Interest, and Money:

"In the long run, we are all dead."

适用于Keynes的激励的东西对于XLOG归档同样是如此;您根本无法继续做下去。在有些时候,XLOG必须被扔掉。为了使清理更容易,您可以放一个archive_cleanup_command到recovery.conf中。就像大多数其他命令,(例如,restore_command),则是以通用的shell脚本。您会把该脚本放在这里,该脚本将在每个重启点被执行。那么,什么是重起点?每次PostgreSQL从基于文件重放转换到基于流的重放,您就正在面对一个重起点。事实上,再次启动流复制被认为是一个启动点。

重起点一到达,您就可以让PostgreSQL执行一些清理程序(或任何其他东西)。清理掉旧的XLOG或触发一些通知是很容易的。

如下脚本显示了您如何清理掉任何一天前的XLOG:

#!/bin/sh

find /archive -mtime +1 -exec rm -f {} \;

请记住,您的脚本可以是任何复杂的类型。您必须决定一个适当的策略来处理XLOG。每个企业的情况是不同的,您可以灵活地控制您的归档和复制行为。

4.6.2 调整您的恢复结束

recovery_end_command提供和archive_cleanup_command类似的目的。当您的恢复(或XLOG流)已经完成,它会触发一些脚本执行。

同样,您可以用它来清理掉旧XLOG,发出通知,或执行任何其他想执行的操作。