我有xlog问题,我不确定。
1)我有两个曾经是奴隶的服务器。我怎么知道他们是否是同一个主人的奴隶?是否可以检查它们是否在过去从同一来源分离?我知道pg_rewind知道如何检查,但是如果不在干运行模式下运行pg_rewind就可以轻松检查它吗?
2)如果pg_last_xlog_replay_location为空,那么这个服务器永远不是奴隶吗?
3)是否可以从数据库本身知道从站连接到哪个主站?我知道从recovery.conf或进程属性获取此信息,但它是否也写在一些系统表中?
由于 阿维
答案 0 :(得分:0)
间接。你可以比较select xmin,ctid,oid, datname from pg_database
。当然,删除和创建postgres和模板数据库会改变这些,所以这是非常不可靠的。但是如果你检查那些并发现所有标识符都匹配 - 那么数据库具有相同的来源就是一个很好的变化。
更可靠,sophisticated method正在比较历史文件。例如 - 如果两个前奴隶具有相同的时间线,例如在低于4的情况下:
-bash-4.2$ psql -d 'dbname=replication replication=true sslmode=require' -U replica -h 1.1.1.1 -c 'IDENTIFY_SYSTEM'
Password for user replica:
systemid | timeline | xlogpos
---------------------+----------+--------------
9999384298900975599 | 4 | F79/275B2328
(1 row)
您可以查看时间表历史记录:
-bash-4.2$ psql -d 'dbname=replication replication=true sslmode=require' -U replica -h 1.1.1.1 -c 'TIMELINE_HISTORY 4'
Password for user replica:
filename | content
------------------+------------------------------------------------------
00000004.history | 1 9E/C3000090 no recovery target specified+
| +
| 2 C1/5A000090 no recovery target specified+
| +
| 3 A52/DB2F98B8 no recovery target specified+
|
(1 row)
如果两个服务器具有相同的时间轴和创建时间轴的相同xlog位置,我相信,你可以说具有很高的可靠性来自同一个源。
pg_last_xlog_replay_location
我会这么说。它从来都不是奴隶,也从未从WAL中恢复过来。至少我不知道如何重置pg_last_xlog_replay_location
升级主人......
没有什么适合我的想法。如果您是SU,那么即使没有shell访问权限,您也可以阅读recovery.conf
,如果您不是,那么您可能无法选择此类视图...