使用Docker 搭建Mysql主从复制详解

最近在看Mysql 的书籍所以刚好有时间就弄一下,Mysql 主从复制的部分,搭建起来有点麻烦,所以刚刚用了Docker 来做,这样就只需要开多个Mysql 容器就好了,不需要弄多台服务器了。这里已 Mysql 5.6的版本来做
Docker 下载 Mysql:5.6镜像:

docker pull mysql:5.6

查看镜像:

docker images

systemctl status firewalld #检查防火墙状态
systemctl stop firewalld *# 关闭防火墙

启动主容器,当前Mysql 容器用来做主数据库服务器

docker run -d --name master -p 3307:3306 -eMYSQL_ROOT_PASSWORD=root mysql:5.6

主数据库服务器 端口使用 3307 避免与3306冲突,用户名密码都是 root
查看容器是否启动成功:

docker ps -a

进入Mysql 容器中:

docker exec -it master /bin/bash

进入Mysql 里面创建复制的账户:

mysql -uroot -p

输入密码 root
创建用于复制的账户:

grant replication slave on . to ‘wanger’@’%’ identified by ‘wanger’;
flush privileges;

这里要注意的一个点就是,因为我们当前版本是5.6所以创建账户和授权是可以一起这么写的,如果是8.0就不能这么去写,就的分开去写。

修改Mysql 配置文件,配置主服务器的servier id,这里由于是docker 容器里面,不能使用 vim 或者vi编辑,我们必须把配置文件拷贝到宿主机中修改,修改成功后,在拷贝进docker 容器里面:

docker cp master:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/mysql/master/my.cnf

这里要注意一定要在容器外面拷贝,也就是宿主机中,然后拷贝的目录一定要先自己创建好 mysql/master 这个目录,不然无法拷贝成功
修改my.cnf 文件

vi mysql.cnf

添加:

log-bin=mysql-bin
server-id=1

编辑成功后,在拷贝进容器中

docker cp /usr/local/mysql/master/my.cnf master:/etc/mysql/mysql.conf.d/mysqld.cnf

重启容器:

docker restart master

配置完成后,进入到 mysql 容器中执行命令查看是否生效
Show master status;
在这里插入图片描述
主服务器到这里就配置成功了,接下来就配置从服务器,从服务器和上面的大致是一样的套路
启动 slave 容器:

docker run -d --name slave -p 3308:3306 -eMYSQL_ROOT_PASSWORD=root mysql:5.6

同样的配置,需要修改mysql文件,这里还是用拷贝的方式去做

docker cp slave:/etc/mysql/mysql.conf.d/mysqld.cnf /usr/local/mysql/master/my.cnf

修改配置文件:

log-bin=mysql-bin
server-id=2

在拷贝进容器中:

docker cp /usr/local/mysql/master/my.cnf slave:/etc/mysql/mysql.conf.d/mysqld.cnf

重启容器和上面的命令一样的
进入从服务器容器中:

docker exec -it slave /bin/bash
mysql -uroot -p

进入之后,设置 从服务器去哪里关联 主服务器 做到 主从数据之间的关联也就是数据复制:

CHANGE MASTER TO
MASTER_HOST=ip,
MASTER_PORT=3307,
MASTER_USER=‘wanger’,
MASTER_PASSWORD=‘wanger’,
MASTER_LOG_FILE=‘mysql-bin.000001’,
MASTER_LOG_POS=0;

START SLAVE;

上面可以解释下 MASTER_HOST 是主服务器的ip地址 MASTER_PORT 主服务器的端口 MASTER_USER 主服务器创建的用户名 MASTER_PASSWORD 密码
MASTER_LOG_FILE 在主服务器看到 值 MASTER_LOG_POS 从0条开始拷贝
START SLAVE 开启复制

查看从服务器的状态:

show slave status

在这里插入图片描述
如果都是yes说明就对了,这里不对的原因有几点就是 防火墙要提前关闭

或者大家可以查看 docker 日志去排除问题:

docker logs slave -f

如果都是yes的话,那么在主服务器上面创建数据库,在从服务器刷新就能看到当前数据库了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值