Docker-Compose实现Mysql主从
1. 简介
通过使用docker-compose
搭建一个主从数据库,本示例为了解耦 将两个server拆分到了两个compose文件中,当然也可以放到一个compose文件中
演示mysql版本:5.7.16
2. 部署流程
master节点:
- 安装mysql-server
- 修改配置
- 创建用于同步的账号并授权
- 检查相关配置
slave节点:
- 安装mysql-server
- 修改配置
- 选择主节点
- 检查相关配置并验证同步功能
3. master节点
3.1 安装mysql
-
创建mysql文件夹并进入文件夹(文件夹名称mysql)
-
创建docker-compose文件内容如下
注意:因为要把配置文件挂在到服务中去,所以要先把容器中的配置文件copy到宿主机上
-
修改配置文件
my.cnf
在文件的最下方加入配置信息
-
启动mysql服务,通过输出内容得知真实的网络名称为
mysql_mysql-net
,也就是当前所在文件夹的名称拼接了文件中指定的网络名称 -
服务启动完毕后,创建用于同步的用户并授权
创建的用户名称为
slave
密码为123456
-
查看master状态信息
4. slave节点
安装步骤同master相同,只把需要修改的展示一下,当前的目录结构如下
docker-compose.yaml
主要修改了网络相关的信息和container_name(网络名称上面有解释)
my.cnf
添加的内容如下:
设置完成后启动salve server,连接slave并关联master节点
MASTER_HOST
:直接使用container_nameMASTER_LOG_FILE/MASTER_LOG_POS
:直接使用安装master步骤中的最后一步的值,其实就是指定同步的bin-log文件名称和Offset
管理完成后 启动salve
最后查看slave status
5. 验证
在master上创建test数据库并创建user表,刷新查看salve库,出现了对应的库表
经验证数据同步也没有问题。
6. 可能遇到的问题
SHOW SLAVE STATUS
时发现 slave_io_running=No salve_sql_running=No
,可能的原因有很多,可以查看如下的字段中输出的内容
可能的原因:
- 主从网络不通
- 两台节点的
server-id
重复,直接修改对应的id即可 - 数据库的uuid相同(可能是因为数据库文件是直接copy过来的导致的),在对应的库下生成不同于master的uuid到
auto.cnf
中即可 - sql执行失败,可能是slave刚添加进来,也没有master库的数据库instance,导致操作对应的库时slave这边根本没有对应的instance或者table又或是记录,引发的报错。这个只能具体问题具体解决了
- master和slave的
MASTER_LOG_FILE/MASTER_LOG_POS
值设置的有问题,在slave节点上STOP SLAVE;
然后重新连接下master即可
7. 同步部分数据库实例或表
在master节点上添加配置【可选】(如果只希望从库读取到部分实例)
在my.cnf文件中加入如下配置
salve端:在my.cnf文件中加入如下配置,这样的话salve只会读取配置的db或table,master对其他db的操作也不会影响slave
__EOF__

本文链接:https://www.cnblogs.com/ludangxin/p/16358928.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了