假设我使用内置复制功能将 Postgres 设置为热备用。现在,想象一个场景,主数据中心断电,从数据中心在另一个数据中心,我将其提升为主数据中心。后来,原来的主人回来了。此时,我可以使用 pg_rewind 将原来的 master 倒回到可以跟随新 master 的状态。有什么方法可以让我看到 pg_rewind 撤消了哪些更改,例如,如果重要的话,我可以通过对新主服务器重新运行插入来手动修复数据?
假设我使用内置复制功能将 Postgres 设置为热备用。现在,想象一个场景,主数据中心断电,从数据中心在另一个数据中心,我将其提升为主数据中心。后来,原来的主人回来了。此时,我可以使用 pg_rewind 将原来的 master 倒回到可以跟随新 master 的状态。有什么方法可以让我看到 pg_rewind 撤消了哪些更改,例如,如果重要的话,我可以通过对新主服务器重新运行插入来手动修复数据?
如果你备份了旧主人的内容,但在分歧点
pg_xlog
之后没有应用到新主人上,正如他们所说,你可以使用(自 9.3 起包含在 PG 发行版中)检查事务日志的内容老主人:pg_xlogdump
不幸的是,WAL 仅包含对数据库集群中物理页的更改,因此目前无法提取完整的 SQL 语句,但至少这应该让您了解所做的更改数量是否重要以及它们是否命中任何相关关系。
您可以使用输出的
xid
字段作为自拆分以来有多少事务已应用于旧主控的指示,并且该rel
字段的最后一个数字将告诉您更改已应用到哪个关系(查看pg_class.relfilenode
以找出确切的关系将会):简而言之,这不是一件容易的事,但至少可以从中获取一些信息。
另一种更简单的方法是打开语句日志记录,但这可能会花费你很多,除非你将日志存储在单独的设备上,这样它就不会对服务器操作造成太大影响 (
log_min_duration_statement = 0
)。