Docker搭建MySQL主從集群,基於GTID


寫在前邊

搭建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, 之后 連接數據庫嘗試,問題已經解決。

本文系原創文章,拒絕轉載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM