1. 程式人生 > >基於Centos7+docker+Mysql的主從、主從從模式配置

基於Centos7+docker+Mysql的主從、主從從模式配置

系統架構

Master節點: 192.168.3.112
Relay節點: 192.168.3.122
Slave節點: 192.168.3.12

基於Docker 執行Mysql

前提: 服務都已經按照好docker,防火牆都已經關閉或者埠都開啟
所有命令都基於root執行,如果非root,請新增sudo命令

每臺伺服器都如下配置

# docker pull mysql:5.7
# cd /data
# mkdir mysql
# cd mysql
# mkdir data conf
# docker run -d -p 3306:3306 --name mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --restart unless-stopped  mysql:5.7
# docker ps

到此,三臺服務的Mysql都已經啟動

配置Master

配置master的Mysql配置

# cd /data/mysql/conf/
# vim my.cnf

填入如下配置

[mysqld]
server_id=1
log-bin=master-bin
log-bin-index=master-bin.index
binlog-ignore-db=mysql

可以通過增加”replicate-do-db” 指定需要複製的資料庫,如果不指定則是所有的資料。如果需要指定多個數據庫,只需要增加多個”replicate-do-db” 即可。
binlog-ignore-db 指定忽略的資料庫
log-bin 指定歸檔日誌的儲存檔案
server_id 必須保證在mysql叢集中,該欄位唯一

重啟mysql

# docker restart mysql

建立用於複製的使用者

# docker exec -it mysql /bin/bash
/# mysql -u root -p
mysql> CREATE USER 'repl'@'192.168.%.%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%.%';
mysql> FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;

記錄:master-bin.0000X
這裡寫圖片描述

docker exec -it mysql /bin/bash 通過docker命令訪問容器,並在容器內部進行mysql相關命令操作
mysql -u root -p 執行完成後,需要輸入密碼。密碼是在建立容器的時候指定的,這裡指定的是 123456

配置Relay

配置Relay的Mysql配置

# cd /data/mysql/conf/
# vim my.cnf

填入如下配置

[mysqld]
server-id=2
binlog-ignore-db=mysql
log_slave_updates=1
log-bin=mysql-bin.log

log_slave_updates=1 該配置是最為關鍵的一步。該配置主要是配置通過master複製的資訊是否寫入到歸檔日誌中。1:表示寫入。
如果是主從模式 “log_slave_updates”、”log-bin” 配置項都可以刪除。

重啟mysql

# docker restart mysql

設定連線的Master資訊

MASTER_HOST: master的地址。
MASTER_USER: 在Master建立的運行復制的使用者。
MASTER_PASSWORD:對應的密碼
MASTER_LOG_FILE: 歸檔日誌檔案。通過檢視master狀態獲得
MASTER_LOG_POS: 當前位置偏移。通過檢視master狀態獲得

# docker exec -it mysql /bin/bash
/# mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.3.112',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master-bin.000008',MASTER_LOG_POS=970;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;

這裡寫圖片描述

建立用於從節點複製中繼節點的使用者(該節點作為master)

mysql> CREATE USER 'repl'@'192.168.%.%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%.%';
mysql> FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;

這裡寫圖片描述

配置Slave

配置Slave的Mysql配置

# cd /data/mysql/conf/
# vim my.cnf

填入如下配置

[mysqld]
server-id=3

重啟mysql

# docker restart mysql

設定連線的Relay資訊

MASTER_HOST: master的地址。
MASTER_USER: 在Master建立的運行復制的使用者。
MASTER_PASSWORD:對應的密碼
MASTER_LOG_FILE: 歸檔日誌檔案。通過檢視master狀態獲得
MASTER_LOG_POS: 當前位置偏移。通過檢視master狀態獲得

# docker exec -it mysql /bin/bash
/# mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.3.122',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=670;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G;

結果驗證

在master的mysql中建立資料庫,並插入資料。在中繼和從節點檢視資料是否同步。