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 命令執行語法,如果複製過程發現不一致時,就會採取直接複製的方式