1. 程式人生 > >MYSQL主從複製的幾種方式

MYSQL主從複製的幾種方式

MySQL 主從複製主要有以下幾種方式:
  •  基於 SQL 語句的複製(statement-based replication, SBR);
  •  基於行的複製(row-based replication, RBR);
  • 混合模式複製(mixed-based replication, MBR);
  •  基於 SQL 語句的方式最古老的方式,也是目前預設的複製方式,後來的兩種是 MySQL 5 以後才出現的複製方式。

RBR 的優點:

  •  任何情況都可以被複制,這對複製來說是最安全可靠的
  • 和其他大多數資料庫系統的複製技術一樣
  •  多數情況下,從伺服器上的表如果有主鍵的話,複製就會快了很多

RBR 的缺點:

  • binlog 大了很多
  •  複雜的回滾時 binlog 中會包含大量的資料
  • 主伺服器上執行 UPDATE 語句時,所有發生變化的記錄都會寫到 binlog 中,而 SBR 只會寫一次,這會導致頻繁發生 binlog 的併發寫問題
  • 無法從 binlog 中看到都複製了寫什麼語句

SBR 的優點:

  • 歷史悠久,技術成熟 binlog 檔案較小
  • binlog 中包含了所有資料庫更改資訊,可以據此來稽核資料庫的安全等情況
  • binlog 可以用於實時的還原,而不僅僅用於複製
  • 主從版本可以不一樣,從伺服器版本可以比主伺服器版本高

SBR 的缺點:

  •  不是所有的 UPDATE 語句都能被複制,尤其是包含不確定操作的時候。
  •  複製需要進行全表掃描(WHERE 語句中沒有使用到索引)的 UPDATE 時,需要比 RBR 請求更多的行級鎖
  •  對於一些複雜的語句,在從伺服器上的耗資源情況會更嚴重,而 RBR 模式下,只會對那個發生變化的記錄產生影響 資料表必須幾乎和主伺服器保持一致才行,否則可能會導致複製出錯
  • 執行復雜語句如果出錯的話,會消耗更多資源。

無論選擇哪種方式複製,都會影響到複製的效率以及伺服器的損耗,甚以及資料一致性性問題,目前其實沒有很好的客觀手手段去評估一個系統更適合哪種方式的複製。

第二個問題是關於主從同步的監控問題,MySQL 有主從同步的狀態資訊,可以通過命令 show slave status獲取,除了獲知當前是否主從同步正常工作,另外一個重要指標就是 Seconds_Behind_Master,從字面理解,它表示當前 MySQL 主從資料的同步延遲,單位是秒,但這個指標從 DBA 的角度並不能簡單的理解為延遲多少秒,感興趣的同學可以自己去研究,但對於應用來說,簡單的認為是主從同步的時間差就可以了,另外,當主從同步停止以後,重新啟動同步,這個數值可能會是幾萬秒,取決於主從同步停止的時間長短,我們可以認為資料此時有很多天沒有同步了,而這個數值越接近零,則說明主從同步延遲最小,我們可以採集這個指標並匯聚曲線圖,來分析我們的
資料庫
的同步延遲曲線,然後根據此曲線,給出一個合理的閥值,主從同步的時延小於閥值時,我們認為從庫是同步的,此時可以安全的從從庫讀取資料。