mysql案例~mysql主從復制延遲概總


        淺談mysql主從復制延遲

1 概念解讀

  需要知道以下幾點

  1 mysql的主從同步上是異步復制,從庫是串行化執行

  2 mysql 5.7的並行復制能加速從庫重做的速度,進一步緩解 主從同步的延遲問題

  3 mysql的Seconds_Behind_Master代表延遲的狀態 0為無延遲 

  4 mysql的Slave_SQL_Running_State:狀態在異常時會有所表現,延遲出現的時候要尤為注意

  5  Master_Log_File = Relay_Master_Log_File,Read_Master_Log_Pos = Exec_Master_Log_Pos 同樣可認為 主從 0 延遲

2 場景分析

  1 sql和io 線程正常 延遲一會就恢復,這樣大多是由於短暫的事務引起的,

      1  短暫小事務 不用關心

       2 定期出現,需要具體分析

  2 sql和io線程正常 磁盤 IO 過高 iowait很高,達到10%以上Exec_Master_Log_Pos 一直在變 證明 從庫一直在追趕主庫 分為幾種情況

      1 從庫的機器硬件性能很差

      2 主庫執行的DML沒有應用索引或者應用不當導致耗時很久,在從庫回放時候很慢 

      3 HP機器RAID卡充放電不正常 會導致這種問題 

      4 主庫業務過於集中,例如一台機器多個DB,導致DML非常頻繁

      5 從庫采用ext4文件系統,jdb2占用IO太高 

 3   sql和io線程正常 延時瞬時很高,然后又恢復正常

 4  sql和io線程正常 Slave_SQL_Running_State:Reading event from relay log,Exec_Master_Log_Pos 一直不變 分為幾種情況

      1 操作的表是myisam表或者沒有索引

      2 執行了大事務(包含DDL) 可能導致這種情況,經常見於刪除大量數據場景

5  Slave_SQL_Running_State:waiting for table flush ,延遲 一直增加

     1 在從庫,當xtarbackup備份的時候,會flush table with read lock,這時候如果從庫有慢查詢在進行,會導致一直等待,waiting for table flush,延遲不斷增加 

6 一台從庫無延遲,另一台從庫出現延遲

    1 在同等硬件配置情況下,主要出現在一台數據庫需要寫中繼日志,以提供canal解析binlog服務。

7  外鍵檢測延遲問題

   1 這種情況比較少見,是我在網上搜到的案例

8  並行復制導致延遲

    1 常見於大表的DDL操作

3 解決方法

  前提 進行 binlog分析 

  1 讀取Exec_Master_Log_Pos mysqlbinlog進行卡主點的解析 mysqlbinlog -vvv --base64-output=decode-rows -j 位置 mysql-bin文件 | more 確定 操作的table和DML語句 還可以根據生成的sql文本大小估算下數據量

  2  針對問題2的解決方案  

      1 更換硬件

      2 優化主庫的慢日志語句,確保從庫能更快的運行

      3 更換RAID卡電池

  3 針對問題3的解決方案

     對於毛刺現象的從庫延時問題 最大的可能來自於時間跨度較大的執行事務(常見於長時間才提交的事務)

  4  針對問題4 的解決方案 

      1 將myisam表轉換為innodb表 

      2 添加主鍵

      3 將大事務進行拆分,尤其是大量的delele操作,很容易導致這種問題

      4 將業務進行優化  

               1 研發進行業務優化 

               2 業務庫進行拆分

  5 針對問題4的解決方案 

       1  優化在從庫的查詢 並且調整備份數據庫時間

  6 針對問題6的解決方案

      1 升級硬件 2 減少主庫事務 

  7 針對問題7 8的解決方案

     1 去掉外鍵檢測 2 對於DDL沒太好辦法

  8 通用解決方案

      1  如果在數據量不是很大的情況下,重做從庫是最快的方式

       2 可以嘗試下 提交方式設為 2 禁止寫binlog等方式嘗試加速復制(感覺效果並不是太好)經朋友補充  添加  innodb_flush_log_at_trx_commit=2 sync_binlog=500  效果不錯,可以提升速度

       3 mysql 5.7的並行復制可以加速復制,非常建議使用

 


免責聲明!

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



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