1. 程式人生 > >MySQL主從不一致的幾種故障總結分析、解決和預防

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

pre .info mysql主從 寫入 stop 不一致 .cn 刪除 err

(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 轉:http://blog.itpub.net/15498/viewspace-2136180/

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