3

只需在此处发布此内容,可能会对其他人有所帮助:

当我们前段时间中断时,我收到了这个错误,并尝试重新启动 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
4

3 回答 3

2

在我们的环境中,这是由 Postgres 在 slon 守护进程之前停机(计划内或计划外)造成的。通常,重新启动 slon 并不能解决错误。解决它的方法是:

  1. 停止所有引用失败/重新启动节点的 slon(如果可以,只需通过slon_kill; 停止所有 slon 更简单)。
  2. 进入sl_nodelock 主数据库服务器上的表,并删除与失败/重新启动的节点对应的 nl_nodeid 的所有行。
  3. 启动任何停止的 slons。
于 2012-02-14T16:21:25.270 回答
1

我也遇到了这个错误,就我而言,应用了第三个修复程序。我们不小心在未来的奴隶上运行了一个“slon”进程。我们的解决方案是关闭该进程,然后重新启动主服务器上的“slon”进程。

于 2012-10-26T11:30:54.120 回答
1

好的,这就是我修复它的方法,但这并不能保证它适用于所有人:

  • 检查 slon 进程。~# ps aux | grep slon
  • 然后杀死运行看起来像这样的 slon 复制服务的所有进程。

    ~# 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 复制服务脚本。


于 2010-09-15T01:45:07.110 回答