mysql replication常見錯誤

myownstars發表於2013-04-11

如果一個sqlmasterslave報告同樣的錯誤,slave會記錄此錯誤但replication不會受影響;

如果錯誤不同,sql執行緒會終止並向錯誤日誌記錄相應資訊,需要DBA介入;

最常見的做法是登陸slave,允許show slave status檢視具體錯誤資訊,根據實際情況修復後呼叫start slave

 

--mastersql執行失敗時,其錯誤程式碼透過QUERY_EVENT中一個欄位記錄入binlog,可透過mysqlbinlog檢視

 

對於MyISAM,可能出現以下情況:

Insert into  values  部分行由於違反表定義插入失敗;Update 更新部分行後被kill

即一個sql沒有全部執行成功,此時slave需要在執行sql時產生同樣錯誤,否則sql thread會停止;

 

另外,同樣的表在master/slave使用不同儲存引擎,

master採用innodbslave使用myisammasterDML因違反外來鍵約束失敗,slave卻得以正確執行,同樣會導致複製停止;

 

1045

Last_IO_Errno: 1045
Last_IO_Error: error connecting to master 'slave_user@master.domain.int:3306' - retry-time: 60 retries: 86400

 

通常是由於密碼錯誤或過長,MASTER_PASSWORD預設32位,

 

1236

[ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)

通常由於master意外重啟導致binlog沒有正常關閉造成的,可使用change master to重新指定position

 

1677

Last_SQL_Errno: 1677
Last_SQL_Error: Column 0 of table ‘aa.heartbeat’ cannot be converted from type ‘smallint’ to type ‘int(11)’

 

由主備表的列型別不一致導致,可設定slave_type_conversions=ALL_NON_LOSSY跳過

MySQL 5.5.3版本開始,支援屬性提升特性,包括有損轉化和無損轉換

引數支援值:
1
ALL_LOSSY:可以將int型轉化成tinyint,存在截斷的情況,有損轉化
2
ALL_NON_LOSSY:不允許出現截斷情況,slave的型別範圍大於master方可轉化。設定這個引數後,如果存在截斷情況,slave會報錯
3、未設定,主備之間必須一致

 

 

slave_skip_errors

可指定錯誤號,slave會自動忽略類似錯誤

候選值all/ddl_exist_errors(用於NDB)以及錯誤號列表,預設為off

 

SQL_SLAVE_SKIP_COUNTER

可透過設定此值選擇跳過master傳來的N個事件

對於last_insert_id()/auto_increment應該設定為2,因為額外產生1INTVAR_EVENT,其有兩個子型別

INSERT_ID_EVENT:標示下一個sql使用AUTO_INCREMENT

LAST_INSERT_ID_EVENT:標示下一個sql使用last_insert_id()

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

相關文章