MySQL主從復制延遲解決方案


第1章 MySQL主從復制延遲解決方案

1.1主從復制原理:

Mysql主從復制是單線程操作的,io線程讀取binlog日志,效率會比較高,但是SQL線程將主庫的DDLDML操作早slave端實施,DMLDDLio操作是隨機的,不是順序的,成本會比較高,還可能salve端有查詢操作導致lock爭搶,SQL線程也是單線成的,一個DDL卡住了,需要時間執行,所有DDL就會等待那個DDL,問題就來了,主從復制就會有延遲了。

1.1.1DDLDML是什么?

 SQL語言共分為四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL

1.1.2為什 么slave會延時?

master是並發的,SQL線程卻不可以

1.2導致主從復制延遲的原因:

  1. 當主庫的TPS並發較高時,產生的DDL數量超過slave一個sql線程所能承受的范圍,那么延時就產生了。
  2. 當然還有就是可能與slave的大型query語句產生了鎖等待。
  3. 服務器硬件太差。
  4. 負載過高(masterslave),大量的查詢操作。
  5. 網絡延遲

1.3如何解決主從復制延遲問題:

1.3.1方案一:讀寫分離

1.3.2方案二:半同步

1.3.3.方案三:修改配置文件,盡量讓主庫的DDL快速執行

比如 sync_binlog=1innodb_flush_log_at_trx_commit = 1 之類的設置,而slave則不需要這么高的數據安全,完全可以講sync_binlog設置為0或者關閉binloginnodb_flushlog也 可以設置為0來提高sql的執行效率

1.3.4方案四:提升slave端硬件設備

使用比主庫更好的硬件設備作為slave


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM