MySQL主從複製不一致的情況的問題總結

chenfeng發表於2017-03-14
1.網路的延遲
由於mysql主從複製是基於binlog的一種非同步複製,透過網路傳送binlog檔案,理所當然網路延遲是主從不同步的絕大多數的原因,特別是跨機房的資料同步出現這種機率非常的大,所以做讀寫分離,注意從業務層進行前期設計。

2.主從兩臺機器的負載不一致
由於mysql主從複製是主資料庫上面啟動1個io執行緒,而從上面啟動1個sql執行緒和1個io執行緒,當中任何一臺機器的負載很高,忙不過來,導致其中的任何一個執行緒出現資源不足,都將出現主從不一致的情況。

3.max_allowed_packet設定不一致
主資料庫上面設定的max_allowed_packet比從資料庫大,當一個大的sql語句,能在主資料庫上面執行完畢,從資料庫上面設定過小,無法執行,導致的主從不一致。
4.key自增鍵開始的鍵值跟自增步長設定不一致引起的主從不一致。

5.mysql異常當機情況下,如果未設定sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出現binlog或者relaylog檔案出現損壞,導致主從不一致。

6.mysql本身的bug引起的主從不同步。

7.版本不一致,特別是高版本是主,低版本為從的情況下,主資料庫上面支援的功能,從資料庫上面不支援該功能。
以上就是常見的一些主從不同步的情況。或許還有其他的一些不同步的情況,請說出你所遇到的主從不一致的情況。
基於以上情況,先保證max_allowed_packet、自增鍵開始點和增長點設定一致,再者犧牲部分效能在主上面開啟sync_binlog,對於採用innodb的庫,推薦配置下面的內容:
1)、innodb_flush_logs_at_trx_commit = 1
2)、innodb-support_xa = 1 # Mysql 5.0 以上
3)、innodb_safe_binlog      # Mysql 4.0
同時在從資料庫上面推薦加入下面兩個引數:
1)、skip_slave_start
2)、read_only

8.主庫的從庫太多,導致複製延遲
從庫資料以3-5個為宜,要複製的從節點數量過多,會導致複製延遲

9.從庫硬體比主庫差,導致複製延遲
檢視Master和Slave的系統配置,可能會因為機器配置不當,包括磁碟I/O、CPU、記憶體等各方面因素造成複製的延遲。一般發生在高併發大資料量寫入場景中

10.慢SQL語句過多
假如一條SQL語句執行時間是20秒,那麼從執行完畢到從庫上能查到資料至少需要20秒,這樣就延遲20秒了。
一般要把SQL語句的最佳化作為常規工作不斷地進行監控和最佳化,如果單個SQL的寫入時間長,可以修改後分多次寫入。透過檢視慢查詢日誌或show full processlist命令,找出執行時間長的查詢語句或大的事務

11.主從複製的設計問題
例如主從複製單執行緒,如果主庫寫併發太大,來不及傳送到從庫,就會導致延遲。更高版本的Mysql可以支援多執行緒複製,入口網站則會開發自己的多執行緒同步功能。

12.主從庫之間的網路延遲
主從庫的網路卡、網線、交換機等網路裝置都可能成為複製的瓶頸,導致複製延遲。另外,跨公網的主從複製很容易導致主從複製延遲

13.主庫讀寫壓力大,導致複製延遲
架構的前端要加buffer及快取層


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

相關文章