MySQL 主從式讀寫分離

MySQL 在操作資料庫的部署方式,其中一種是採取主從式讀寫分離的方式處理。

主(master) 主要用於寫入資料,從(Slave)主要進行讀取。在一般情況,資料庫採取這樣的方式與傳統單一部署方式並不會有太大的差異,但是在百萬等級的操作時,就可以明顯的分擔資料庫的處理程序。

原因在於資料庫在寫入相關操作速度會有 X鎖及 S 鎖的競爭關係,速度較慢。

讀取則速度較快,因此採取讀寫效率會顯著增加讀的效率。

而讀寫分離的方式,其背後基本原理其實是以物理方式來取得性能。

以下簡單說明 Master 及 Slave 的資料傳送過程:

主 (Master)

首先,在設定主資料庫時,必須先配置好 log-bin ,並且指定要儲存「二進位」的路徑,並且在操作資料存取過程會再透過 binary log event 將資料寫入 master binary log。

從 (Slave)

完成寫入二進位制的紀錄後,Master會再通知儲存引擎,讓 Slave 將 master binary log 複製到中繼 log,過程會是從 Master 發起一個 I/O 來開啟一個連線,接著執行 binlog dump process,這個 binlog dump process 大部分時間都會處於休眠狀態,當 master 接收到資料寫入 master binary log 時,bingo dump process 就會將資料進行讀取,接著會從中繼資料會被 SQL 線程讀取,並且存回 Slave 資料庫。

小提醒,在設定 Slave 資料庫時,建議以 MyISAM 引擎增加讀取性能。

binary log 執行的項目

在 Master 與 Slave 所複製的內容項目,主要包括有

  • 基本 SQL 執行語法
  • 直接將新增的行數進行複製(不執行 SQL 命令)
  • 混合以上兩種,先採取 SQL 命令執行語法,如果複製過程發現不一致時,就會採取直接複製的方式