基於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中建立資料庫,並插入資料。在中繼和從節點檢視資料是否同步。