MySQL 复制不同步

Ale*_*lex 2 mysql synchronization database replication

我有一个主-主复制系统。但是,由于自动增量问题,我在复制中遇到了错误……并且它停止了复制。

有人告诉我这样做:

stop slave; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;  start slave;
Run Code Online (Sandbox Code Playgroud)

它没有用。然后他们告诉我这样做:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 2;  
Run Code Online (Sandbox Code Playgroud)

它没有用。然后为了测试它,我做了:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 99999; 
Run Code Online (Sandbox Code Playgroud)

它开始了,但没有更新。我在 DB1 上创建了一个表……但它没有显示在 DB2 上……

下面是我的 DB1 和 DB2 的显示状态(我把它们放在一起):

mysql> show master status\G
*************************** 1. row ***************************
            File: mysql-bin.000605
        Position: 2019727
    Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

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.000605
        Read_Master_Log_Pos: 2008810
             Relay_Log_File: mysqld-relay-bin.001731
              Relay_Log_Pos: 10176595
      Relay_Master_Log_File: mysql-bin.000470
           Slave_IO_Running: Yes
          Slave_SQL_Running: Yes
            Replicate_Do_DB:
        Replicate_Ignore_DB:
         Replicate_Do_Table:
     Replicate_Ignore_Table:
    Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                 Last_Errno: 0
                 Last_Error:
               Skip_Counter: 4255373725
        Exec_Master_Log_Pos: 10176458
            Relay_Log_Space: 135062517347
            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: 1376343
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

如何修复它以便它们再次同步?谢谢你。

tex*_*tex 5

你似乎真的不知道你在做什么。首先,您应该获得数据转储以防止任何类型的损坏。

所以你使用的是 Master-Master 复制,对吧?

这听起来很奇怪,因为您只提供一种 SLAVE 状态和一种 MASTER 状态,但我们需要 MASTER 和两种 SLAVE 状态输出。此外,没有replicate_ignore_* 语句,这看起来不像Master-Master 复制。此外,SLAVE STATUS 中没有错误语句。他们会显示任何复制错误。

如何解决这个问题:从每个 master 获取一个干净的转储并将其插入另一个 master。它在mysql手册中有描述,这里是简短版本:

mysql> FLUSH TABLES WITH READ LOCK;
$> mysqldump -uroot -p<pass> --opt --all-databases | gzip --fast > dump_master1.sql.gz
mysql> UNLOCK TABLES;
Run Code Online (Sandbox Code Playgroud)

记住:不要只执行别人告诉你的命令!首先在手册中查找它并检查它的作用。将您的 SKIP_SLAVE_COUNTER 设置为 9999 之类的内容是您新创建的表没有显示在您的从站上的原因,因为它跳过了 9999 条 sql 语句,这可能还没有发生!通常您不会将 SKIP_SLAVE_COUNTER 设置为大于 1,然后执行 START SLAVE 并使用 SHOW SLAVE STATUS 查看是否有任何新错误。