共計 1516 個字符,預計需要花費 4 分鐘才能閱讀完成。
這篇文章給大家分享的是有關 MySQL 主從復制不一致的情況有哪些的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。
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 及緩存層
感謝各位的閱讀!關于“MySQL 主從復制不一致的情況有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!