我有一些不确定的 xlog 问题。
1) 我有两台曾经是奴隶的服务器。我怎么知道他们是否是同一个主人的奴隶?是否可以检查它们过去是否从同一来源拆分?我知道 pg_rewind 知道如何检查是否,但是是否可以在不在试运行模式下运行 pg_rewind 的情况下轻松检查它?
2) 如果 pg_last_xlog_replay_location 为空,这个服务器从来就不是从服务器,这是真的吗?
3) 是否可以从数据库本身知道slave连接到哪个master?我知道从 recovery.conf 或进程属性中获取此信息,但它是否也写在某些系统表中?
谢谢 视频
最佳答案
- 是同一个主人的奴隶
间接地。你可以比较 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
,如果不是,您可能无法选择这样的 View ...
关于postgresql - xlog - 知道两个数据库是否来自源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875627/