Mysql

MySQL 複製不同步

  • February 23, 2011

我有一個主-主複製系統。但是,由於自動增量問題,我在複製時遇到了錯誤……它停止了複製。

有人告訴我這樣做:

stop slave; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;  start slave;

它沒有用。然後他們告訴我這樣做:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 2;  

它沒有用。然後為了測試它,我做了:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 99999; 

它開始了,但它沒有更新。我在 DB1 上創建了一個表……它沒有出現在 DB2 上……

下面是我的 DB1 和 DB2 的 SHOW STATUS(我把它們放在一起):

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)

如何修復它以便它們再次同步備份?謝謝你。

你似乎並不真正知道自己在做什麼。首先,您應該獲取數據轉儲以防止任何類型的損壞。

所以你使用的是主-主複製,對嗎?

這聽起來很奇怪,因為您只提供一個 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;

記住:不要只執行別人告訴你的命令!首先在手冊中查找它並檢查它的作用。將您的 SKIP_SLAVE_COUNTER 設置為 9999 是您新創建的表沒有出現在您的從屬設備上的原因,因為它跳過了 9999 條 sql 語句,這可能還沒有發生!通常你不會將 SKIP_SLAVE_COUNTER 設置為大於 1,然後執行 START SLAVE 並查看 SHOW SLAVE STATUS 是否有任何新錯誤。

引用自:https://serverfault.com/questions/91447