天天看點

主從同步常見故障

主從同步,常見故障!

1、在master上删除一條記錄,在slave上找不到。

Last_SQL_Error.Could not execute Delete_rows event on table ….Error_code:1032……

2、主鍵沖突,在slave已經有該記錄,     又在master上插入了同一條記錄

Last_SQL_Error.Could not execute Write_rows event on table…… Error_Code :1062……

3、在master上更新一條記錄,在slave上找不到資料

Last_SQL_Error.Could not execute Update_rows event …… Error_Code: 1032……

以上三種情況在HA切換過程中,由于異步複制且sync_binlog=0 時,會造成小部分binlog 沒接受完而導緻報錯。

4、slave中繼日志損壞

Last_SQL_Error:Error initializing relay log postion: I/O error reading the header from the binary log

Last_SQL_Error:Error initializing relay log positon:Binlog has bad magic number:it’s not a binary log file that can be used by this version of MySQL.

Slave 當機或非法關機,電源故障、硬體故障,造成中繼日志損壞。

解決方法:

對于第一種情況: master要删除一條記錄,而slave上找不到相應記錄而報錯。Master上已經删除,slave 并沒有改記錄,可以直接跳過:

Stop slave ; set global sql_slave_skip_counter=1;start slave;

對于監控的情況: 出現情況報警,如何控制呢? 調用腳本?

對于第二種情況的處理:對于重複的記錄,需要删除重複的鍵值。!

第三種情況: master更新的記錄,在slave上找不到。通過 Mysqlbinlog 分析出真實的語句,将slave缺少的記錄進行手動填充。!

第四種:找到salve 同步執行到master的位置。重新做同步。

        查找變量:

        Relay_Master_Log_File:

        Exec_Master_Log_Pos:

        從這兩個位置重新同步。

 如果業務允許的話,可以設定下面兩個變量:

slave-skip-errors=1022,1032,1062 (必須在 my.cnf中進行設定,隻讀的系統變量)

(1022 :Message: Can't write; duplicate key in table '%s')

(1032: Message: Can't find record in '%s')

(1062: Message: Duplicate entry '%s' for key %d)

slave_exec_mode (可在全部變量中進行設定)

可選項為STRICT(預設)和IDEMPOTENT 模式, STRICT遇到任何問題,都會導緻複制的停止。

IDEMPOTENT 對于 duplicate key 和 no-key-found錯誤跳過。

注:以上兩個參數的設定,如果出現跳過的情況,則會在錯誤日志中進行記錄。(如何把出現問題的時候 出現的監控中呢? 問題一!)

錯誤我們可以解決,那主從資料的一緻性我們該如何驗證呢?可以參考這邊文章:

<a href="http://weipengfei.blog.51cto.com/1511707/976545">http://weipengfei.blog.51cto.com/1511707/976545</a>

在出現主從資料不一緻的情況,如何修複呢?

本文轉自 位鵬飛 51CTO部落格,原文連結:http://blog.51cto.com/weipengfei/1068258,如需轉載請自行聯系原作者