MySQL 5.7 多主一從(多源複製)同步配置

K'illCode發表於2018-12-17

多主一從,也稱為多源複製,資料流向:

 

  • 主庫1 -> 從庫s

  • 主庫2 -> 從庫s

  • 主庫n -> 從庫s

 

應用場景

 

 

  • 資料彙總,可將多個主資料庫同步彙總到一個從資料庫中,方便資料統計分析。

  • 讀寫分離,從庫只用於查詢,提高資料庫整體效能。

 

部署環境

 

 

注:使用docker部署mysql例項,方便快速搭建演示環境。但本文重點是講解主從配置,因此簡略描述docker環境構建mysql容器例項。

 

 

  • 資料庫:MySQL 5.7.x  (相比5.5,5.6而言,5.7同步效能更好,支援多源複製,可實現多主一從,主從庫版本應保證一致)

  • 作業系統:CentOS 7.x

  • 容器:Docker 17.09.0-ce

  • 映象:mysql:5.7

  • 主庫300:IP=192.168.10.212; PORT=4300; server-id=300; database=test3; table=user

  • 主庫400:IP=192.168.10.212; PORT=4400; server-id=400; database=test4; table=user

  • 主庫500:IP=192.168.10.212; PORT=4500; server-id=500; database=test5; table=user

  • 從庫10345:IP=192.168.10.212; PORT=4345; server-id=10345; database=test3,test4,test5; table=user

 

配置約束

 

 

  • 主從庫必須保證網路暢通可訪問

  • 主庫必須開啟binlog日誌

  • 主從庫的server-id必須不同

 

【主庫300】操作及配置

 

配置my.cnf

 

 

 

安裝啟動

 

 

 

注:若不熟悉docker,可使用傳統方式安裝mysql,效果相同。

 

建立授權使用者

 

 

連線mysql主資料庫,鍵入命令mysql -u root -p,輸入密碼後登入資料庫。建立使用者用於從庫同步複製,授予複製、同步訪問的許可權

 

 

 

log_bin是否開啟

 

 

 

檢視master狀態

 

 

 

【主庫400】配置及操作

 

配置my.cnf

 

 

 

安裝啟動

 

 

 

建立授權使用者

 

 

建立使用者用於從庫同步複製,授予複製、同步訪問的許可權

 

 

 

log_bin是否開啟

 

 

 

檢視master狀態

 

 

 

【主庫500】配置及操作

 

配置my.cnf

 

 

 

安裝啟動

 

 

 

建立授權使用者

 

 

建立使用者用於從庫同步複製,授予複製、同步訪問的許可權

 

 

 

log_bin是否開啟

 

 

 

檢視master狀態

 

 

 

【從庫10345】配置及操作

 

配置my.cnf

 

 

 

安裝啟動

 

 

 

設定【主庫】資訊

 

 

登入【從庫10345】,進入mysql命令列。

 

 

 

stop slave;     //停止同步

start slave;     //開始同步

//必須和【主庫】的資訊匹配。
CHANGE MASTER TO
MASTER_HOST='192.168.10.212',     //主庫IP
MASTER_PORT=4300,                       //主庫埠
MASTER_USER='slave',                     //訪問主庫且有同步複製許可權的使用者
MASTER_PASSWORD='123456',      //登入密碼
//【關鍵處】從主庫的該log_bin檔案開始讀取同步資訊,主庫show master status返回結果
MASTER_LOG_FILE='mysql-bin.000003',
//【關鍵處】從檔案中指定位置開始讀取,主庫show master status返回結果
MASTER_LOG_POS=438
for channel '300';            //定義通道名稱

 

檢視同步狀態

 

 

 

可以看見設定三個的主從同步通道的所有狀態資訊。


只有【Slave_IO_Running】和【Slave_SQL_Running】都是Yes,則同步是正常的。


如果是No或者Connecting都不行,可檢視mysql-error.log,以排查問題。

 

 

 

配置完成,則【從庫10345】開始自動同步。

 

 

若需要單獨啟動或停止某個同步通道,可使用如下命令:


start slave for channel '300';     //啟動名稱為300的同步通道
stop slave for channel '300';     //停止名稱為300的同步通道

 

驗證資料同步

 

建庫

 

 

使用root賬號登入【主庫300】,建立test3資料庫 

 

 

 

建表

 

 

在【主庫300】中建立user表

 

 

 

新增

 

 

在【主庫300】中向user表插入一條資料:

 

 

 

在【從庫10345】中查詢user表資料:

 

 

 

新增記錄同步成功。

 

更新

 

 

在【主庫300】中修改剛才插入的資料:

 

 

 

在【從庫10345】中查詢user表資料:

 

 

 

更新記錄同步成功。

 

刪除

 

 

在【主庫300】中刪除剛才更新的資料:

 

 

 

在【從庫10345】中查詢user表資料:

 

 

 

刪除記錄同步成功。


注:【主庫400】、【主庫500】的驗證操作與上述類似。

 

 

補充:

 

 

  • 如果【主伺服器】重啟mysql服務,【從伺服器】會等待與【主伺服器】重連。當主伺服器恢復正常後,從伺服器會自動重新連線上主伺服器,並正常同步資料。

  • 如果某段時間內,【從資料庫】伺服器異常導致同步中斷(可能是同步點位置不匹配),可以嘗試以下恢復方法:進入【主資料庫】伺服器(正常),在bin-log中找到【從資料庫】出錯前的position,然後在【從資料庫】上執行change master,將master_log_file和master_log_pos重新指定後,開始同步。 

 

相關文章