主 - 主复制上的MySQL自动递增问题,以及解决它的逻辑

时间:2009-12-08 21:34:55

标签: mysql database replication

我有一个主 - 主复制的自动增量重复问题。然后,我设置:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 99999;

这会跳过9999次查询。然后我做了:

SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

似乎运行正常。

但是,当然,因为我跳过99999个语句...如果我对数据库1进行了更改,它将不会在数据库2上反映...直到99999语句通过。正确的吗?

嗯......我创建了一个脚本来自动将999999行插入到虚拟表中。这应该绰绰有余吧?我的2个数据库应该再次同步???

但是,我在我的第300万行,它似乎没有工作。我的数据库2仍然没有我刚刚在数据库1上创建的这300万行。

2 个答案:

答案 0 :(得分:2)

同步dbs之后,您可以通过将每个主设备设置为在自动启用时具有不同的偏移来避免这种情况。

i.e. 
master-1 only creates ids as: 1,11,21,31,41...
master-2 only creates ids as: 2,12,22,32,42...

On master-1, add this to the my.cnf
auto_increment_increment = 10
auto_increment_offset = 1

on master-2, and this to the my.cnf
auto_increment_increment = 10
auto_increment_offset = 2

现在他们永远不会碰撞。

答案 1 :(得分:1)

我在这样的例子中所做的是:

  • 停止奴隶(STOP SLAVE)
  • 删除不同步的从属表
  • 停止主人(STOP MASTER)
  • 转储正确的MASTER表
  • 将MASTER表重新导入SLAVE
  • 重启主人和奴隶

表现在应该重新同步。