我的系统管理员设置了 2 个同步的数据库。主主同步。但是,这两个数据库没有同步

我的系统管理员设置了 2 个同步的数据库。主主同步。但是,这两个数据库没有同步

DB1 和 DB2。

我对 DB1 做了一些更改,但 DB2 上似乎没有。当我在 DB2 上执行“SHOW SLAVE STATUS\G”时,似乎出现了错误:

mysql> show slave status\G
*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 
                Master_User: 
                Master_Port: 
              Connect_Retry: 60
            Master_Log_File: mysql-bin.0005496
        Read_Master_Log_Pos: 5445649315
             Relay_Log_File: mysqld-relay-bin.0041705
              Relay_Log_Pos: 1624302119
      Relay_Master_Log_File: mysql-bin.0004461
           Slave_IO_Running: Yes
          Slave_SQL_Running: No
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 1062
                 Last_Error: Error 'Duplicate entry '4779' for key 1' on query. Default database: 'falc'. Query: 'INSERT INTO `log` (`anon_id`, `created_at`, `query`, `episode_url`, `detail_id`, `ip`) VALUES ('fdzn1d45kMavF4qbyePv', '2009-11-19 04:19:13', 'amazon', '', '', '130.126.40.57')'
               Skip_Counter: 0
        Exec_Master_Log_Pos: 162301982
            Relay_Log_Space: 136505187184
            Until_Condition: None
             Until_Log_File:
              Until_Log_Pos: 0
         Master_SSL_Allowed: No
         Master_SSL_CA_File:
         Master_SSL_CA_Path:
            Master_SSL_Cert:
          Master_SSL_Cipher:
             Master_SSL_Key:
      Seconds_Behind_Master: NULL
1 row in set (0.00 sec)

然后我就这么做了显示表格,而且 DB2 似乎缺少我在 DB1 上创建的表……这意味着由于某种原因,DB2 停止与 DB1 同步。

我怎样才能简单地让它们再次完全同步?

我想要的只是 DB2 与 DB1 完全相同!

答案1

通过在两台服务器上设置 auto_increment_increment 和 auto_increment_offset 值可以避免主键冲突。

在两台服务器上将 auto_increment_increment 设置为相同的值(例如,4) 在两台服务器上将 auto_increment_offset 设置为不同的值(例如,服务器 A 上为 1,服务器 B 上为 2)。

这将有助于避免将来自动增量主键发生冲突。两个 mysql 服务器都需要重新启动才能使此方案生效,理想情况下,当您重新启动它们时,它们应该同步。

您的系统管理员可能已经完成所有这些操作,但它看起来像是 auto_increment 键冲突。

至于您当前的困境,请检查log两台服务器上表中 ID 为 4779 的行。如果行完全相同,则可以安全地运行 SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE; 以再次运行复制。

如果它们不同,您将需要决定保留哪一个。

请记住,您为解决此问题而发出的任何 SQL 插入/更新/删除语句最终都将在两台服务器上运行,因此请仔细考虑。

您可以使用 SQL_LOG_BIN=0; 指令仅在一个框上运行一条语句来修复复制错误。

祝你好运!

答案2

MySQL 复制是 A->B 而不是 A<->B,因此请确保您正在更新主数据库 (A),它是向下复制到从属数据库 (B) 的数据库。如果没有,那么这可能是您的问题。

答案3

我猜想是某个地方的表设置不正确。复制停止,因为复制查询失败:

查询中键 1 的条目“4779”重复

您可以将跳过查询计数设置为 1,然后继续处理,这样复制器将跳过错误语句并继续复制。然后您的表将(可能)在复制恢复后不久出现。但是,您必须问自己,“为什么这个复制查询失败了?”。然后您必须问自己,“你觉得自己很幸运吗?”小子。嗯,是吗?

相关内容