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
, 之后 连接数据库尝试,问题已经解决。
本文系原创文章,拒绝转载
分类:
Docker
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了