【问题标题】:pg_rewind failing to sync second databasepg_rewind 无法同步第二个数据库
【发布时间】:2020-02-22 22:45:54
【问题描述】:

我有一个 PostgreSQL 集群,其中包含以下数据库,用户为 myuser

  1. 数据库1
  2. 数据库2

我已经设置了一个主服务器 (192.168.50.8) 和一个从服务器 (192.168.50.9) 的复制。我故障转移到从服务器,当我尝试对每个数据库使用 pg_rewind 故障回复到原始主服务器时,pg_rewind 对第一个数据库成功,但对第二个数据库失败。

对于 database1,在 (192.168.50.8) 上运行以下命令可以:

/usr/pgsql-11/bin/pg_rewind -D "data_dir_path_here" --source-server="port=pg_port_here user=myuser dbname=database1 host=192.168.50.9"

对于 database2,在 (192.168.50.8) 上运行以下命令会给我一个错误:

/usr/pgsql-11/bin/pg_rewind -D "data_dir_path_here" --source-server="port=pg_port_here user=myuser dbname=database2 host=192.168.50.9"

错误:

target server must be shut down cleanly
failure, exiting

【问题讨论】:

    标签: postgresql failover postgresql-11


    【解决方案1】:

    你使用pg_rewind 和旧的主人(192.168.50.8)把它变成奴隶。如果关机不干净,您必须在 PostgreSQL 上运行崩溃恢复(只需启动服务器并在崩溃恢复完成后再次停止它)。然后你可以运行pg_rewind

    pg_rewind 影响整个数据库集群,因此您不要为每个数据库运行它。你在应该成为新奴隶的旧主人上运行一次。

    如果您使用pg_rewind--source-server 选项连接到新的master,那么您指定哪个数据库都没有关系。任何数据库都可以,效果都一样。

    【讨论】:

    • 我只在旧主机 (192.168.50.8) 上运行 pg_rewind。
    • 是的,这很酷。只在那里运行它。如果您不能让节点执行崩溃恢复以便pg_rewind 可以运行,则必须从头开始重建新的备用。 pg_rewind 并不能保证成功,它只是在可能的情况下重建备用的快速方法。
    • 请注意,我们的集群中有多个数据库。它适用于第一个数据库,但对第二个数据库给出错误。我在互联网上搜索过,我得到的所有示例都只有一个集群中的数据库。我的问题与多个数据库有关。
    • 我想我终于理解你了。我已经更新了答案。
    • 所以这意味着我不能使用 pg_rewind?我不能将我的数据库合二为一。如果我不提供数据库名称,则会失败并出现错误 database 'myuser' does not exists
    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2017-04-14
    • 2011-11-25
    • 1970-01-01
    • 2021-01-10
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多