架構師必備:MySQL主從延遲解決辦法


上一篇文章介紹了MySQL主從同步的原理和應用,本文總結了MySQL主從延遲的原因和解決辦法。如果主從延遲過大,會影響到業務,應當采用合適的解決方案。

MySQL主從延遲的表現

先insert或update寫入更新操作,再立即select查詢,但是得不到最新的結果。
可通過show slave status命令,結果中的Seconds_Behind_Master列,查看主從延遲的秒數。

MySQL主從延遲的原因

  1. 讀寫分離時,寫操作走主庫,讀操作走從庫,但是主庫的變更還未同步至從庫
  2. 網絡傳輸延遲:從庫發起dump請求,主庫推送binlog文件,從庫寫入本地relay log
  3. 從庫串行執行sql語句:主庫並發的事務提交,但是在從庫上只能串行執行,速度比主庫慢

MySQL主從延遲解決辦法

業務優化

如果業務場景允許,先寫入更新操作,等待一小段時間后再查詢。比如,新增一條記錄,前端故意延遲半秒再調后端接口查詢。

技術優化

  • 拆庫+並行復制:MySQL支持庫級別的並行復制,拆庫后每個分庫的數據量變小,主從延遲自然也變小了。
  • 慢sql優化除慢sql,也能降低主從延遲

終結方案

以上辦法治標不治本,只能起到緩解主從延遲的作用,徹底根治還需這么做。

  • 顯式查主庫:不同的分片中間件做法不一樣,client側分片可在每次查詢前設置查主庫的標記(ThreadLocal變量),proxy側分片開啟事務
    優點:實現簡單,缺點:受MySQL QPS限制,QPS極高時不推薦

  • 雙寫數據庫和緩存,查緩存:避免MySQL主從延遲
    優點:可支撐高並發場景


免責聲明!

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



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