【问题标题】:Mysql ID Duplication issue in Replication复制中的Mysql ID重复问题
【发布时间】:2021-04-06 15:10:51
【问题描述】:

我尝试用 3 个系统实现 MySQL 复制。

在我的设置中,我有如下配对

                (Master  ,Slave   )
                (System_1,System_2)
                (System_1,System_3)

                (System_2,System_1)
                (System_2,System_3)

                (System_3,System_1)
                (System_3,System_2)

因此,在此设置中,每个系统都是其他所有系统的主从系统。

每个系统也都有本地数据库。

现在在简单的情况下一切正常。但是在测试中我面临一个问题是......

假设某个时刻 System_3 断开连接,而不是此时所有 3 个系统都有一些条目,直到 id=3(主键和唯一)。

系统_1

id Value
1 abc
2 xyz
3 pqr

系统_2

id Value
1 abc
2 xyz
3 pqr

系统_3

id Value
1 abc
2 xyz
3 pqr

现在说,当 System_3 离线时,它在本地表中创建了一些 id 为 4 的条目,同时其他两个系统,即 System_1、System_2 在线,创建了一些也将使用 id 4 的条目在他们各自的表中进行复制。

现在说 System_3 上线,它将读取其他系统的 bin 日志文件,并尝试插入其他系统所做的更改以在 id 4 处复制。但是繁荣 System_3 已经在 id 4 处具有值。这里复制停止了。

我的问题是如何解决这个问题。

【问题讨论】:

    标签: mysql replication database-replication mysqlbinlog multi-master-replication


    【解决方案1】:

    这是主主复制场景中的常见问题。处理它的一种方法是给每个系统一个auto_increment_increment的系统数量。

    结合auto_increment_offset可以避免重复键。

    这样您可以确保 system_1 只提供 ID 3, 6, 9, ... 和 system_2 2, 5, 8, ... 和 system_3 1, 4, 7, ...

    【讨论】:

    • 你是对的,但在这种情况下,如果我必须使用 id 从 System_1 更新到所有其他系统怎么办?我的意思是我不能像下面这样更新 update tablename set columnName = 'Some Value' where id = 3;
    • 当然,为什么不呢?这只是改变了每个 MySQL 服务器如何选择下一个自动增量 ID,以防它必须插入一行。
    猜你喜欢
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2011-07-16
    • 2011-09-28
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多