xlog - 知道两个数据库是否来自源

时间:2017-10-22 15:10:24

标签: postgresql

我有xlog问题,我不确定。

1)我有两个曾经是奴隶的服务器。我怎么知道他们是否是同一个主人的奴隶?是否可以检查它们是否在过去从同一来源分离?我知道pg_rewind知道如何检查,但是如果不在干运行模式下运行pg_rewind就可以轻松检查它吗?

2)如果pg_last_xlog_replay_location为空,那么这个服务器永远不是奴隶吗?

3)是否可以从数据库本身知道从站连接到哪个主站?我知道从recovery.conf或进程属性获取此信息,但它是否也写在一些系统表中?

由于 阿维

1 个答案:

答案 0 :(得分:0)

  1. 是同一主人的奴隶
  2. 间接。你可以比较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位置,我相信,你可以说具有很高的可靠性来自同一个源。

    1. 清空pg_last_xlog_replay_location
    2. 我会这么说。它从来都不是奴隶,也从未从WAL中恢复过来。至少我不知道如何重置pg_last_xlog_replay_location升级主人......

      1. 系统表,告知从属设备连接的主设备
      2. 没有什么适合我的想法。如果您是SU,那么即使没有shell访问权限,您也可以阅读recovery.conf,如果您不是,那么您可能无法选择此类视图...