第1章 MySQL主從復制延遲解決方案
1.1主從復制原理:
Mysql主從復制是單線程操作的,io線程讀取binlog日志,效率會比較高,但是SQL線程將主庫的DDL和DML操作早slave端實施,DML和DDL的io操作是隨機的,不是順序的,成本會比較高,還可能salve端有查詢操作導致lock爭搶,SQL線程也是單線成的,一個DDL卡住了,需要時間執行,所有DDL就會等待那個DDL,問題就來了,主從復制就會有延遲了。
1.1.1DDL和DML是什么?
SQL語言共分為四大類:數據查詢語言DQL,數據操縱語言DML,數據定義語言DDL,數據控制語言DCL。
1.1.2為什 么slave會延時?
master是並發的,SQL線程卻不可以
1.2導致主從復制延遲的原因:
- 當主庫的TPS並發較高時,產生的DDL數量超過slave一個sql線程所能承受的范圍,那么延時就產生了。
- 當然還有就是可能與slave的大型query語句產生了鎖等待。
- 服務器硬件太差。
- 負載過高(master,slave),大量的查詢操作。
- 網絡延遲
1.3如何解決主從復制延遲問題:
1.3.1方案一:讀寫分離
1.3.2方案二:半同步
1.3.3.方案三:修改配置文件,盡量讓主庫的DDL快速執行
比如 sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設置,而slave則不需要這么高的數據安全,完全可以講sync_binlog設置為0或者關閉binlog,innodb_flushlog也 可以設置為0來提高sql的執行效率
1.3.4方案四:提升slave端硬件設備
使用比主庫更好的硬件設備作為slave。