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

标签 postgresql

我有一些不确定的 xlog 问题。

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

2) 如果 pg_last_xlog_replay_location 为空,这个服务器从来就不是从服务器,这是真的吗?

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

谢谢 视频

最佳答案

  1. 是同一个主人的奴隶

间接地。你可以比较 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

我会这么说。它从来都不是奴隶,也从未从 WAL 中恢复过。至少我不知道如何在提升的主控上重置 pg_last_xlog_replay_location...

  1. 系统表告诉从站连接到哪个主站

我没有想到合适的。如果您是 SU,那么即使没有 shell 访问权限,您也可以阅读 recovery.conf,如果不是,您可能无法选择这样的 View ...

关于postgresql - xlog - 知道两个数据库是否来自源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46875627/

相关文章:

查询结果中的 PHP 和 PostgreSQL 标准类型。为什么总是字符串?

SQL 为每个用户获取过去 5 天内的所有行,并为该 5 天之前的每个用户获取第一行

java - 使用 play framework v1.5 连接 db postgresql 时出错

sql - Postgresql: append 两个具有不同列的表

postgresql - RpostgreSQL 中的时区和 POSIXct 处理

sql - 如何从sql查询中获取二进制数据?

java - Spring Data JPA - 保存重复的复合键时不会出现任何错误

postgresql - 安装odoo后Odoo 500服务器内部错误

postgresql - 为什么 PostgreSQL 可序列化事务认为这是冲突?

mysql - 如何根据列选择表