主節(jié)點:可讀可寫吉嫩。
從節(jié)點:可讀不可寫,可以用來分擔(dān)主節(jié)點讀操作壓力油挥。
這里搭建的是1個主節(jié)點,1個從節(jié)點。
1. 拉取鏡像
docker pull mysql:latest
2. 建立相關(guān)目錄
建立主節(jié)點和從節(jié)點的配置深寥、數(shù)據(jù)攘乒、日志目錄
mkdir -p /mysql_test/mysql_cluster/master/config
mkdir -p /mysql_test/mysql_cluster/master/data
mkdir -p /mysql_test/mysql_cluster/master/log
mkdir -p /mysql_test/mysql_cluster/slave/config
mkdir -p /mysql_test/mysql_cluster/slave/data
mkdir -p /mysql_test/mysql_cluster/slave/log
修改log目錄的所屬用戶,其實data也是要改的惋鹅,但是data會自動改则酝。不修改log目錄權(quán)限啟動容器會報錯。
sudo chown 999 /mysql_test/mysql_cluster/master/log
sudo chown 999 /mysql_test/mysql_cluster/slave/log
3. 建立配置文件
配置文件名為my.cnf
闰集。主節(jié)點的放在/mysql_test/mysql_cluster/master/config
里沽讹,從節(jié)點的放在/mysql_test/mysql_cluster/slave/config
里。
配置文件詳解可以參考https://blog.csdn.net/uisoul/article/details/111677544
主節(jié)點my.cnf
內(nèi)容武鲁。
[mysqld]
skip-host-cache
skip-name-resolve
log-error=/var/log/mysql/error.log
server-id=1
log-bin=mysql-bin
從節(jié)點my.cnf
內(nèi)容妥泉,注意節(jié)點的server-id
不可以相同。
[mysqld]
skip-host-cache
skip-name-resolve
log-error=/var/log/mysql/error.log
server-id=2
relay-log=mysql-relay
4. 建個密碼配置文件洞坑,為了docker啟動腳本中不出現(xiàn)密碼明文
mkdir -p /mysql_test/mysql_cluster/master/config/secrets
mkdir -p /mysql_test/mysql_cluster/slave/config/secrets
echo "1234567" > /mysql_test/mysql_cluster/master/config/secrets/password
echo "1234567" > /mysql_test/mysql_cluster/slave/config/secrets/password
5. 編寫主從容器啟動腳本
主節(jié)點容器腳本run_mysql_cluster_master.sh
docker run --name mysql_master1 \
-h mysql_master1 \
-p 0.0.0.0:4000:3306 \
-v /mysql_test/mysql_cluster/master/config:/etc/mysql/conf.d \
-v /mysql_test/mysql_cluster/master/data:/var/lib/mysql \
-v /mysql_test/mysql_cluster/master/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD_FILE=/etc/mysql/conf.d/secrets/password \
--restart=always \
-d mysql:latest \
從節(jié)點容器腳本run_mysql_cluster_slave.sh
docker run --name mysql_slave1 \
-h mysql_slave1 \
-p 0.0.0.0:4001:3306 \
-v /home/xushuzhen/mysql_test/mysql_cluster/slave/config:/etc/mysql/conf.d \
-v /home/xushuzhen/mysql_test/mysql_cluster/slave/data:/var/lib/mysql \
-v /home/xushuzhen/mysql_test/mysql_cluster/slave/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD_FILE=/etc/mysql/conf.d/secrets/password \
--restart=always \
-d mysql:latest \
6. 啟動容器
sh run_mysql_cluster_master.sh
sh run_mysql_cluster_slave.sh
7. 建立同步用戶
使用mysql命令行或者數(shù)據(jù)庫工具盲链,連接主節(jié)點。
我使用的是Navicat迟杂,安裝可以參考https://www.bilibili.com/read/cv17235251
連上主節(jié)點刽沾,建立同步用戶。建完要修改成mysql_native_password
形式的密碼排拷,不改可能會不能同步侧漓。
CREATE USER 'slave1'@'%' IDENTIFIED BY '1234567';
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
FLUSH PRIVILEGES;
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '1234567';
8. 查看主節(jié)點信息
show master status;
查詢結(jié)果是
9. 給從節(jié)點配置上同步用戶
連接從節(jié)點后,該命令填入主節(jié)點的:ip监氢、端口布蔗、步驟7里建的用戶名密碼、步驟8查出來的mysql-bin信息浪腐,然后執(zhí)行纵揍。
CHANGE MASTER TO MASTER_HOST='192.168.10.2',
MASTER_PORT=4000,
MASTER_USER='slave1',
MASTER_PASSWORD='1234567',
MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=2643;
啟動從服務(wù)
start slave;
查看從服務(wù)狀態(tài)
show slave status;
可以看到剛剛配的信息,然后水平滾動條往后拉一拉议街,看到這兩項都是Yes
泽谨,主從復(fù)制集群就搭建OK了。
如果Slave_IO_Running
狀態(tài)不是Yes
特漩,而一直是Connecting
那就檢查一下步驟9命令里填的主節(jié)點相關(guān)信息有沒有填對吧雹。
如果還不行,再檢查一下步驟7中有沒有改為mysql_native_password
形式的密碼涂身,改完執(zhí)行停止雄卷、重置從服務(wù)命令
stop slave;
reset slave;
然后再執(zhí)行步驟9。
OK之后蛤售,可以在主節(jié)點里建庫建表丁鹉,寫個數(shù)據(jù)妒潭。然后重新鏈接一下從節(jié)點,就可以看到自動同步的表了鳄炉。主從數(shù)據(jù)一致杜耙。