mysql主從復制,經常會遇到錯誤而導致slave端復制中斷,這個時候一般就需要人工干預,跳過錯誤才能繼續。
跳過錯誤有兩種方式:
1.跳過指定數量的事務
mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 #跳過一個事務
mysql>slave start
2.修改mysql的配置文件
- 通過slave_skip_errors參數來跳所有錯誤或指定類型的錯誤
vi /etc/my.cnf
注意:在[mysqld]下面加入以下內容
#slave-skip-errors=1062,1053,1146 #跳過指定error no類型的錯誤
slave-skip-errors=all #跳過所有錯誤
然后,重啟服務器即可
#重啟mysql
service mysqld restart
#重啟后,查看mysql狀態
service mysqld status
#查看主從狀態兩個yes即為主從成功
show slave status\G
實例
- 出現錯誤導致主從復制中斷
- 修改mysql的配置文件
- 重啟服務
#查看主從狀態兩個yes即為主從成功
show slave status\G
mysql主從備份常見錯誤及解決方案
筆者在初次成功配置了mysql數據庫主從備份后,以為自此可以萬事無憂。但未過多久,通過查詢指令查看從服務器的同步狀態,發現報錯了,在網上尋求解決辦法解決后。發現不多久,又會出現其他類型的錯誤。總之,感覺很棘手,也覺得主從備份不可靠,需要人經常去查看同步狀態,一旦出現報錯,需要及時人為的處理。這樣的情況一般出現在最初做數據庫同步的那幾天,還有就是主服務器,或者從服務器宕機時間長了的情況。常見錯誤及解決方案如下:
[ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position', Error_code: 1236
解決方案:出現1236,出現這種錯誤一般是主從服務器失去連接,出現了宕機的情況。常用解決辦法,重新查詢主服務器的狀態,獲取新的position位置,重新設置從服務器的同步信息。設置命令為:change master to master_log_file='',master_log_pos=123;
Last_Errno: 1032, Last_Error: Could not execute Update_rows event on table xuanzhi.test; Can't find record in 'test', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql
解決方案:出現1032,表示從數據庫上面缺少某一條數據記錄,主數據庫對這條記錄又做了修改,從數據庫在修改時報錯。解決方案是直接用數據庫管理工具,數據傳輸模式處理具體異常的數據表,保證主數據與從數據庫對應的報錯數據表結構信息一樣。
Last_Errno: 1062,Last_Error: Could not execute Write_rows event on table xuanzhi.test; Duplicate entry '5' for key 'PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log
解決方案:出現1062,表示主鍵沖突,及從數據庫上面出現了主數據庫上面沒有的主鍵信息記錄。解決方案是直接刪除提示的從數據庫中的異常數據,或者利用數據傳輸模式處理具體異常的數據表。
Last_Errno: 1594,Last_Errno: 1593
解決方案:中繼日志錯誤,一般是服務器宕機引起,解決方案和出現錯誤1236一樣。在msql 5.5以上版本,可在slave的配置文件my.cnf里要增加一個參數relay_log_recovery=1。