寫在前邊
搭建MySQL讀寫分離主從集群,這里未使用binlog
方式,使用的是GTID
方式
源碼見我的Github https://github.com/hellxz/mysql-cluster-docker.git
主從目錄結構
.
├── bin
│ ├── add-slave-account-to-master.sh
│ ├── reset-slave.sh
│ ├── slave-replias-master-start.sh
│ └── stop-replicas.sh
├── config
│ ├── master.cnf
│ └── slave.cnf
├── docker-compose.yml
├── .env
├── master-data
├── show-slave-status.sh
└── slave-data
目錄/文件說明:
bin/add-slave-account-to-master.sh
:Master節點添加備份賬戶的腳本config/master.cnf
: MySQL Master節點的配置文件config/slave.cnf
: MySQL Slave節點的配置文件docker-compose.yml
: 構建主從節點與掛載數據目錄的docker-compose配置文件master-data
: 主節點數據位置,當然生產環境要掛到別的位置slave-data
:從節點數據位置,當然生產環境要掛到別的位置bin/slave-replias-master-start.sh
:從節點添加主節點備份賬號信息並開啟備份的腳本bin/stop-replicas.sh
:關閉從節點備份的腳本bin/reset-slave.sh
: 重置從節點備份狀態,修復由於主從集群重啟后無法建立集群的問題.env
: 環境變量文件bin/show-slave-status.sh
: 查看主從連接狀態的腳本
搭建過程:
1.修改.env
文件
# default environment arguments for docker-compose.yml
# set master data dir
MASTER_DATA=./master-data
# set slave data dir
SLAVE_DATA=./slave-data
# set master & slave root password
MASTER_PASSWD=P@ssw0rd
# set slave root passwor
SLAVE_PASSWD=P@ssw0rd
# set replicas mysql account name
REPL_NAME=replicas
# set replicas mysql password
REPL_PASSWD=replicasPasswd
MASTER_DATA
是Master節點的數據目錄,需要修改到宿主機對應的位置,SLAVE_DATA亦然。
MASTER_PASSWD
是主節點的root密碼,bin目錄下的腳本會讀取這個變量的值從而進行訪問數據庫
SLAVE_PASSWD
是從節點的root密碼,腳本也會讀
REPL_NAME
是主節點要創建的賬戶名,從節點通過這個賬戶進行訪問
REPL_PASSWD
是主節點要創建的REPL_NAME
對應的密碼
2.啟動兩個節點,執行docker-compose up -d
檢查已經啟動
3.進入bin目錄,執行腳本
cd bin
./add-slave-account-to-master.sh #讀取mysql密碼,為主節點添加備份賬戶
./slave-replias-master-start.sh #從節點使用備份賬戶連接主節點,開啟備份
4.查看集群狀態,在bin目錄下執行./show-slave-status.sh
到此搭建完成。
故障修復
1.重啟MySQL集群后從節點無法正常恢復解決。
執行bin目錄下的reset-slave.sh
, 之后 連接數據庫嘗試,問題已經解決。
本文系原創文章,拒絕轉載