1. 程式人生 > 其它 >架構師必備:MySQL主從延遲解決辦法

架構師必備: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主從延遲
    優點:可支撐高併發場景