同步故障Last_Errno:1051

xishuai236發表於2015-06-23
這是另外一套主從架構。同事說空間使用82%了,讓我看一下。後發現這個從庫的同步存在問題。
  1. mysql> show slave status \\G
  2. ***************** 1. row **********************
  3.        Slave_IO_State: Waiting for master to send event
  4.           Master_Host: 10.128.45.8
  5.           Master_User: slave
  6.           Master_Port: 3306
  7.         Connect_Retry: 60
  8.       Master_Log_File: mysql-bin.000036
  9.   Read_Master_Log_Pos: 165692224
  10.        Relay_Log_File: mysqld-relay-bin.000039
  11.         Relay_Log_Pos: 177273627
  12. Relay_Master_Log_File: mysql-bin.000016
  13.      Slave_IO_Running: Yes
  14.     Slave_SQL_Running: No
  15.                   ... ...
  16.            Last_Errno: 1051
  17.            Last_Error: Error 'Unknown table 'storefeedback500.a1'' on query. Default database: 'storefeedback500'. Query: 'DROP TABLE `a1` /* generated by server */'
錯誤訊息,表a1曾經存在於在主伺服器中並已被取消了,但是它沒有在從屬伺服器中存在過,因此對於從屬伺服器,DROP TABLE失敗。
很明顯,同步出現問題:
  1. Slave_SQL_Running為No說明從庫的SQL執行緒沒有啟動
  2. Read_Master_Log_File說明從庫的IO執行緒當前正在讀取的主庫二進位制日誌的位置,在36
  3. Relay_Log_File說明從庫的SQL執行緒當前正在讀取中繼日誌的位置,在39
  4. 實際中繼日誌已經到99,說明已經有60(99-39)箇中繼日誌沒有在從庫執行
  1. tail -3 mysqld-relay-bin.index
  2. ./mysqld-relay-bin.000097
  3. ./mysqld-relay-bin.000098
  4. ./mysqld-relay-bin.000099
使用mysqlbinlog檢視日誌(從4月28日下午到現在一直沒有同步了,但中繼日誌都已在從庫中生成):

  1. 對應的主庫日誌為16
  2. # at 177273464
  3. #150428 15:46:36 server id 1 end_log_pos 177273603 CRC32 0x1eccec59 Query    thread_id=510660    exec_time=0    error_code=0
  4. SET TIMESTAMP=1430207196/*!*/;
  5. DROP TABLE `a1` /* generated by server */
  6. /*!*/;
  1. 從庫的中繼日誌39,從庫的SQL執行緒停止在此位置
  2. # at 177273627
  3. #150428 15:46:36 server id 1 end_log_pos 177273603 CRC32 0x1eccec59 Query thread_id=510660 exec_time=0 error_code=0
  4. SET TIMESTAMP=1430207196/*!*/;
  5. DROP TABLE `a1` /* generated by server */
我選擇的解決方法

  1. mysql> stop slave;
  2. Query OK, 0 rows affected (0.01 sec)
  3. mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
  4. Query OK, 0 rows affected (0.00 sec)
  5. mysql> start slave;
  6. Query OK, 0 rows affected (0.01 sec)
檢視從庫及其日誌,已經開始正常複製
對mysq複製l還不是特別熟悉,感覺還是sql_slave_skip_counter將改為0更好。
  1. mysql> stop slave;
  2. Query OK, 0 rows affected (0.01 sec)
  3. mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=0;
  4. Query OK, 0 rows affected (0.00 sec)
  5. mysql> start slave;
  6. Query OK, 0 rows affected (0.01 sec)
參考:
http://blog.csdn.net/cheungjustin/article/details/6069117
http://blog.itpub.net/29500582/viewspace-1318552/
http://dinglin.iteye.com/blog/1236330

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26831783/viewspace-1709708/,如需轉載,請註明出處,否則將追究法律責任。

相關文章