我有一个PostgreSQL集群,其中包含以下数据库和用户myuser
:
我已经设置了一个主服务器(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
你使用pg_rewind
和旧的主人(192.168.50.8)把它变成奴隶。如果关闭不干净,你必须在PostgreSQL上运行崩溃恢复(只需启动服务器并在崩溃恢复完成后立即再次停止)。然后你可以运行pg_rewind
。
pg_rewind
会影响整个数据库集群,因此不要为每个数据库运行它。你在应该成为新奴隶的旧主人身上运行一次。
如果使用--source-server
的pg_rewind
选项连接到新主服务器,则指定哪个数据库无关紧要。任何数据库都可以,效果也一样。