docker镜像mysql主从_Docker搭建MySQL主从复制(一主一从)

一、Docker安装MYSQL

说明: 系统为阿里云服务器,操作系统为CentOS7.6。MYSQL版本 8.0.22

1、安装Docker

f45bdba4657929d1f0a15349e8d0974f.png

2、拉取MySQL的镜像

709fdede20d22a72f8fb04865f97a52c.png

运行完以上命令之后,镜像就已经下载下来了,可以用 docker images命令查看是否已经下载成功

3、第一次启动MySQL

433e3bf817959d7cb836eb1d27c91574.png

参数说明

c60f92fa02fb2685d4c2138aa705755a.png

之后的第二次启动直接用 docker start MYSQL8即可。

4、连接navicat

新装了MYSQL8.0后再用navicat连接就会报2059的错误。上网查了发现是8.0之后MYSQL更改了密码的加密规则,只要在命令窗口把加密方法改回去即可。

1) 首先使用以下命令进入MySQL的Docker容器

49f97c8de2edb419c0e2396028615ae5.png

2)然后登录MySQL

a30f4c40e20db35b137350fa0299623f.png

3)最后运行以下SQL即可

添加完后保存,同时退出当前Docker容器。因为修改了配置文件,所以要重启下该MYSQL,这里重启下该Docker容器就好了。

c855fd07e4040efd76d3880b4d7c8de5.png

这样就可以通过navicat工具连接当前数据库了。这里顺便看下当前MYSQL的版本,通过 select version();

bb9e7392f779291c51423b7118b4e441.png

明显可以看到当前MYSQL的版本是 8.0.22

注意:

我这边Master库和Slave库不在同一个服务器,所以Slave安装MYSQL的步骤和Master一样就可以了。一定要记住Msater库和Slave库的MYSQL版本号要一致。

二、配置Master和Slave

这里假设主从服务器的IP如下

00b5daec1eea2502f2126f3be4978f3c.png

1、配置Master

因为是通过Docker部署的MYSQL,所以要进入Docker内部修改MYSQL配置文件

530edd0546ba80e4ee2ef53d04344c3b.png

进入容器后,切换到 /etc/mysql目录下,使用vim命令编辑 my.cnf 文件。

注意:

此时用vim 命令会报 vim: command not found,因此我们需要在Docker内部安装vim工具。

在my.cnf添加如下配置

073b2b4e563f860b632921c27cb3fcb7.png

添加完后保存,同时退出当前Docker容器。因为修改了配置文件,所以要重启下该MYSQL,这里重启下该Docker容器就好了。

0925af2895bab175b46b87d92c4245a1.png

这个时候我们通过工具连接该MYSQL服务器,你可以通过navicat或者Sequel pro等等,连接登上后。

创建用户并授权

8a074997d63d184e9df7c313b7ce1873.png

至此,Master配置完成。

2、配置从库

和上面一样进入到 etc/mysql路径,使用vim命令编辑 my.cnf 文件:

4a6b73911ea96067460cf0caa5680654.png

配置完成后也需要重启Docker容器。

ef26bed87af9e1bd94bdf6733556fad7.png

3、开启Master-Slave主从复制

上面两步Master和Slave都配置成功了,而且Master也为Slave读取Master数据专门设置了一个账号,下面就来实现同步。

进入Master库查看Master状态

4d1bc79f4de287cb30bcda30554c9157.png

9b282fcdda3a2b4b94e2d69e40189c69.png

记住File和Position,后面Slave库会在这个文件这个位置进行同步数据。此时一定不要操作Master库,否则将会引起Master状态的变化,File和Position字段也将会进行变化。

进入Slave库执行SQL

a6a4e9bbf4859f5a31f61b3dcf711125.png

启动之后我们来看下有没有成功。

show slave status命令

786d3e6a45dfaeb765f48c4793072596.png

从这张图很明显看出,对于Slave的两个线程都成功了,那就说明整个MYSQL主从搭建成功了。如果有一个为NO,那就需要到后面看错误日志,是什么原因出错了,解决下就好了。

6553b7d65b8567945285ae3323d51dc7.png

三、测试

这里简单做一个测试

1、只在Mater 创建一张User表

现在 只在Mater 创建一张User表,如果现在Slave也同样生成这张User表,那就说明成功了。

b39bfdce157129d1426d226f68ebc61a.png

实际测试结果是成功的。

注意:

这里如果我们先手动在Slave创建这张User表,然后再到Master创建User表那就出事情了。我们按照上面的步骤创建完后,去Slave通过 show slave status 查看

d9bdd03590c5601652b7da745ec8d17d.png

发现 SQL线程都变NO了。原因很简单,错误日志也说明了(Error 'Table 'user' already exists')。因为你在Master创建User表的SQL会记录到bin-log日志中,然后Slave

去读取这个操作,然后写入Slave中的时后发现这个SQL执行失败,因为你Slave已经存在该User表,然后这整个主从复制就卡在这里了。这是个很严重的问题。

所以一旦搭建主从复制成功,只要在Master做更新事件(update、insert、delete),不要在从数据做,否则会出现数据不一致甚至同步失败。

2、Master插入一条数据

754be4a84a362bc4fb12a9183917f88b.png

再去Slave数据库查看

90e8df9be55cb1502e37cd8bf4e81ea2.png

发现从数据库已经写入成功了。

总结:在搭建的过程可能还有其它的问题出现 你只要在Slave服务器,通过show slave status,如果两个IO是否为YES就代表是否成功,如果有为NO的,后面有字段说明是什么原因导致的,你再根据相关错误信息去查询下解决方案,那就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值