1. 程式人生 > >處理MYSQL主從庫資料不一致的問題【Slave_SQL_Running: No】

處理MYSQL主從庫資料不一致的問題【Slave_SQL_Running: No】

      場景:有同事需要把從庫中的資料,同步一份到新環境,但發現在主庫上執行count語句,和從庫上執行count語句得出的結果不同。

解決思路:

在從庫上執行 show slave status \G ,檢視返回結果:

*************************** 1. row ***************************
             Slave_IO_State: Waiting for master to send event
                Master_Host: 192.168.1.118
                Master_User: bak
                Master_Port: 3306
              Connect_Retry: 60
            Master_Log_File: mysql-bin.000728
        Read_Master_Log_Pos: 586670704
             Relay_Log_File: mysqld-relay-bin.002178
              Relay_Log_Pos: 457911949
      Relay_Master_Log_File: mysql-bin.000709
           Slave_IO_Running: Yes
          Slave_SQL_Running: No


            Replicate_Do_DB: mydb
        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 'XXXXXXX' for key 2' on query. Default database: 'mydb'. Query: 'INSERT INTO `network` (`uuid`, `machine_name`, `port`, `update_time`) VALUES ('5''

               Skip_Counter: 0
        Exec_Master_Log_Pos: 457911812
            Relay_Log_Space: 20988097167
            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)

發現從庫在同步時出錯,沒有能正常同步,解決方法:

第一:停止slave,slave stop;

第二:跳過一條出錯的語句:set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 

第三:啟動slave,slave start;

第四:使用show slave status \G 檢視當前的同步情況,如果Slave_SQL_Running: Yes,則成功,如果Slave_SQL_Running: No,則再次執行一到四。如果不想一次次重複,可以在第二步中跳過多條錯誤的語句。

最後看看當前從庫與主庫的時間差:Seconds_Behind_Master: 197011