mysql5.7主從延遲


一般主從復制,有三個線程參與,都是單線程:Binlog Dump(主) ----->IO Thread (從) -----> SQL Thread(從)。復制出現延遲一般出在兩個地方

1)SQL線程忙不過來(可能需要應用數據量較大,可能和從庫本身的一些操作有鎖和資源的沖突;主庫可以並發寫,SQL線程不可以;主要原因)

 

2)網絡抖動導致IO線程復制延遲(次要原因),我們的主從庫都是局域網同個交換機內,且主從授權都走內網ip,故這個原因不存在;

 

ySQL從5.6開始有了SQL Thread多個的概念,可以並發還原數據,即並行復制技術。

  MySQL 5.6中,設置參數slave_parallel_workers = 4(>1),即可有4個SQL Thread(coordinator線程)來進行並行復制,其狀態為:Waiting for an evant from Coordinator。

但是其並行只是基於Schema的,也就是基於庫的。如果數據庫實例中存在多個Schema,這樣設置對於Slave復制的速度可以有比較大的提升。通常情況下單庫多表是更常見的一種情形,

那基於庫的並發就沒有卵用。其核心思想是:不同schema下的表並發提交時的數據不會相互影響,即slave節點可以用對relay log中不同的schema各分配一個類似SQL功能的線程,

來重放relay log中主庫已經提交的事務,保持數據與主庫一致。

  在MySQL 5.7中,引入了基於組提交的並行復制(Enhanced Multi-threaded Slaves),設置參數slave_parallel_workers>0並且global.slave_parallel_type=‘LOGICAL_CLOCK’,

即可支持一個schema下,slave_parallel_workers個的worker線程並發執行relay log中主庫提交的事務。其核心思想:一個組提交的事務都是可以並行回放(配合binary log group commit);

slave機器的relay log last_committed相同的事務(sequence_num不同)可以並發執行。

  其中,變量slave-parallel-type可以有兩個值:DATABASE 默認值,基於庫的並行復制方式;LOGICAL_CLOCK:基於組提交的並行復制方式

MySQL 5.7開啟Enhanced Multi-Threaded Slave配置:

#slave

slave-parallel-type=LOGICAL_CLOCK slave-parallel-workers=16 master_info_repository=TABLE relay_log_info_repository=TABLE relay_log_recovery=ON


線上數據庫,做了mysql主從,因為主庫有時時寫入數據,從庫延遲10多個小時,根據以上方法,成功解決了延遲的問題,達到了實時同步;

 


至此,主從復制延遲,徹底解決


免責聲明!

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



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