MySQL主從複製

MySQL複製

前言

MySQL內置的複製功能是構建基於MySQL的大規模、高性能應用的基礎。這類應用使用所謂的“水平擴展”的架構。我們可以通過爲服務器配置一個或多個備庫的方式來進行數據同步 。複製功能不僅有利於構建高性能的應用,同時也是高可用性、可擴展性、災難恢復、備份以及數據倉庫工作的基礎。

複製的工作機制

  1. 在主庫中把數據記錄到二進制日誌(Binary Log)中。

    在每次需要提交事務完成數據更新之前,主庫將數據更新的事件記錄到二進制日誌中。MySQL會按事務提交的順序而不是每條語句執行的順序來記錄二進制日誌。 在記錄二進制日誌後,主庫會告訴存儲引擎可以提交事務了。

  2. 備庫將主庫中的日誌複製到自己的中繼日誌(Relay Log)中。

    備庫會啓動一個I/O線程,I/O線程將與主庫建立一個普通的客戶端連接,然後主庫上會啓動一個特殊的轉儲線程,這個線程讀取主庫上的二進制日誌中的事件,備庫I/O線程將接收的事件記錄到中繼日誌中。

  3. 備庫讀取中繼文件中的事件,將其重放到備庫數據之上。

    備庫的SQL進程從中繼文件中讀取事件並在備庫中執行,從而實現備庫事件的更新。

複製的配置

以下基於MySQL5.7配置,主備庫服務器IP分別爲192.168.137.128192.168.137.129

1. 創建複製賬號
MySQL會賦予一些特殊的權限給複製的線程,在備庫中的I/O線程會建立一個到主庫的TCP/IP連接,因此主庫中需要創建一個用戶,並賦予其合適的權限。
這裏寫圖片描述
如上,創建用戶repl,密碼123465,並賦予REPLICATION SLAVE, REPLICATION CLIENT權限。

2. 配置主庫
在主庫的my.cnf增加或修改如下內容
這裏寫圖片描述
log_bin選項指定二進制日誌文件的位置和命名,如果之前沒有配置log_bin選項,則需要重啓mysql服務。server_id 選項設置唯一的服務器ID

查看主庫狀態
這裏寫圖片描述
3. 配置備庫
在備庫的my.conf中添加或修改如下內容,並重啓msyql
這裏寫圖片描述
relay_log選項指定中繼日誌的位置和命名。
log_slave_updates選項設置允許備庫將重放時間也記錄到自身的二進制日誌中。
read_only選項設置阻止非特權用戶修改數據。

4. 啓動複製
指定主庫IP,賬號信息、二進制日誌信息,MASTER_LOG_POS指定日誌開始位置
這裏寫圖片描述

查看備庫複製狀態,對比執行START SLAVE操作前後
未執行START SLAVE前狀態
未開啓複製
執行START SLAVE後狀態
開啓複製
Slave_IO_Running 代表備庫I/O線程的運行狀態。
Slave_SQL_Running 表示備庫SQL線程的運行狀態。
Slave_IO_State 表示I/O線程狀態。上圖顯示錶示等待主庫傳輸數據。

複製常見結構

基本原則
1)一個mysql備庫實例只能有一個主庫
2)每個備庫只能有一個唯一的服務器ID
3)一個主庫可以有多個備庫,一個備庫可以有多個兄弟備庫
4)如果打開了log_slave_updates選項,一個備庫可以作爲其他備庫的主庫。

一主庫多備庫

這裏寫圖片描述
這是最簡單的結構,適用於小量寫,大量讀得場景。可以把讀操作分攤到多個備庫上,直到備庫給主庫造成了太大的負擔或主備庫之間的帶寬成爲瓶頸爲止。也可以將多個備庫用於不同的用途。

主 - 主複製

主動 - 主動模式

這裏寫圖片描述
這種模式下,兩個服務器都被配置爲對方的主庫和備庫。這種配置最大的問題是如何解決衝突,兩個可寫的互主服務器導致的問題非常多。這通常發生在兩臺服務器同時修改同一行記錄,或同時在兩臺服務器上向一個包含AUTO_INCREMENT列的表中插入數據。MySQL5.0增加了新特性,可以設置auto_increment_increment(設置自增字段每次遞增的量)和auto_increment_offset(設置自增字段從哪裏開始遞增),通過這兩個選項自動爲插入語句選擇互不衝突的值。

主動 - 被動模式

這裏寫圖片描述
這種模式是主動 - 主動模式下的一個變體,主要區別在於其中一臺服務器是隻讀的被動服務器。由於服務器的配置是對等的,因此使得切換主動-被動服務器方便,這也是構建容錯性和高可用性系統非常強大的方式。

主 - 主模式配置

1)確保兩臺服務器上有相同的數據。
2)啓用二進制日誌,選擇唯一的服務器ID,並創建複製賬號。
3)啓用備庫更新的日誌記錄,這是故障轉移和故障恢復的關鍵。
4)把被動服務器配置爲只讀,防止可能與主動服務器上的更新產生衝突,這點是可選的(主動 - 被動模式需配置)。
5)啓動每個服務器的MySQL實例。
6)將每個主庫設置爲對方的備庫,使用新創建的二進制日誌開始工作。

擁有備庫的主 - 主結構

這裏寫圖片描述
這種模式爲每個主庫增加了備庫,這種配置優點是增加了冗餘。對於不同地理位置的複製,能夠消除站點單點失效的問題。

其他模式

環形複製

這裏寫圖片描述
環形結構可以有三個或更多的主庫,每個服務器都是在它之前的服務器的備庫,是在它之後服務器的主庫。雙主結構實際上是環形結構的一種特例。

樹或金字塔形

這裏寫圖片描述
這種結構的好處是減少了主庫的負擔,它的缺點是中間層出現的任何錯誤都會影響到多個服務器。

—————END—————

參考文獻
[1] 高性能MySQL(第3版)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章