只需在此处发布此内容即可帮助其他人:
我们前一次中断时遇到此错误,并尝试重新启动slon复制服务,因为复制并未真正将数据从MASTER复制到SLAVE:
FATAL localListenThread: "select "_MY_DATABASE_copy".cleanupNodelock(); insert into "_MY_DATABASE_copy".sl_nodelock values ( 1, 0, "pg_catalog".pg_backend_pid()); " - ERROR: duplicate key value violates unique constraint "sl_nodelock-pkey"
DEBUG2 slon_abort() from pid=xxxx
DEBUG1 slon: shutdown requested
答案 0 :(得分:2)
在我们的环境中,这是由于Postgres在slon守护进程之前停机而导致的中断(计划内或计划外)造成的。通常,重新启动slon不能解决错误。解决它的是:
slon_kill
停止所有的懒人;更简单)。 sl_nodelock
master数据库服务器上的表,并删除所有行
nl_nodeid对应于失败/重启节点。 答案 1 :(得分:1)
好的,这就是我修复它的方法,但这不能保证它适用于所有人:
~# ps aux | grep slon
然后杀死所有进程 运行slon replicatin服务 看起来像这样。
~# ps aux | grep slon
root 8321 0.0 0.0 6528 1568 pts/2 S+ 10:35 0:00 slon MY_SCHEMA dbname=MY_DATABASE user=postgres host=169.1.1.1 password=password
通常它有两个进程在后台运行,这是正常的,所以我们必须杀死这些进程。
~# kill -9 8321
然后再次运行你的slon replicatin服务脚本。
答案 2 :(得分:1)
我也遇到了这个错误,在我的情况下,应用了第三个修复。我们意外地在奴隶身上运行了一个'slon'进程。我们的解决方案是关闭该进程,然后重新启动主服务器上的“slon”进程。