MySQL主從不一致的幾種故障總結分析、解決和預防

chenfeng發表於2017-03-28
(1).主從不一致故障,從庫當機,從庫啟動後重複寫入資料包錯
解決與預防:
relay_log_info_repository=TABLE
(InnoDB)
引數解釋說明:
若relay_log_info_repository為FILE,當設定為0,交由OS重新整理磁碟,受引數sync_relay_log_info的影響,預設為10000次重新整理到磁碟;
若relay_log_info_repository為TABLE,且為INNODB儲存,則無論為任何值,則都每次event都會更新表。
relay_log_info_repository=table可以避免relay.info更新不及時,SLAVE 重啟後導致的主從複製資料重複插入報錯問題。

修改步驟:
1. stop slave;
2. set global relay_log_info_repository=’TABLE’;
或在my.cnf中設定:
relay_log_info_repository = TABLE


(2).主從不一致故障,主庫當機
解決與預防:
方法1:主庫啟動後,binlog補全即可

方法2:Innodb_flush_log_at_trx_commit=1
Innodb_flush_log_at_trx_commit引數值說明如下:
0 - 每一秒將修改記錄同步到日誌(磁碟)中,commit的時候不同步
1 - 每次事務commit都將修改記錄同步到日誌(磁碟)中
2 - 每次事務commit都將修改寫入到作業系統cache中,然後每一秒將修改記錄同步寫入到日誌(磁碟)中

方法3:應用程式雙寫
方法4:應用程式寫日誌
方法5:MySQL半同步(semi sync)


(3).主從不一致故障,從庫資料被修改
通常報錯總結如下:
ERROR:1032
從庫找不到要刪除的資料
ERROR:1062
從庫插入資料,發生唯一性衝突
ERROR:1452
無法在外來鍵的表插入或更新參考主鍵沒有的資料

解決與預防:
1.設定使用者許可權
2.設定從庫只讀許可權
set global read_only=true

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

相關文章