一、Docker安装MYSQL
说明: 系统为阿里云服务器,操作系统为CentOS7.6。MYSQL版本 8.0.22
1、安装Docker
2、拉取MySQL的镜像
运行完以上命令之后,镜像就已经下载下来了,可以用 docker images命令查看是否已经下载成功
3、第一次启动MySQL
参数说明
之后的第二次启动直接用 docker start MYSQL8即可。
4、连接navicat
新装了MYSQL8.0后再用navicat连接就会报2059的错误。上网查了发现是8.0之后MYSQL更改了密码的加密规则,只要在命令窗口把加密方法改回去即可。
1) 首先使用以下命令进入MySQL的Docker容器
2)然后登录MySQL
3)最后运行以下SQL即可
添加完后保存,同时退出当前Docker容器。因为修改了配置文件,所以要重启下该MYSQL,这里重启下该Docker容器就好了。
这样就可以通过navicat工具连接当前数据库了。这里顺便看下当前MYSQL的版本,通过 select version();
明显可以看到当前MYSQL的版本是 8.0.22
注意:
我这边Master库和Slave库不在同一个服务器,所以Slave安装MYSQL的步骤和Master一样就可以了。一定要记住Msater库和Slave库的MYSQL版本号要一致。
二、配置Master和Slave
这里假设主从服务器的IP如下
1、配置Master
因为是通过Docker部署的MYSQL,所以要进入Docker内部修改MYSQL配置文件
进入容器后,切换到 /etc/mysql目录下,使用vim命令编辑 my.cnf 文件。
注意:
此时用vim 命令会报 vim: command not found,因此我们需要在Docker内部安装vim工具。
在my.cnf添加如下配置
添加完后保存,同时退出当前Docker容器。因为修改了配置文件,所以要重启下该MYSQL,这里重启下该Docker容器就好了。
这个时候我们通过工具连接该MYSQL服务器,你可以通过navicat或者Sequel pro等等,连接登上后。
创建用户并授权
至此,Master配置完成。
2、配置从库
和上面一样进入到 etc/mysql路径,使用vim命令编辑 my.cnf 文件:
配置完成后也需要重启Docker容器。
3、开启Master-Slave主从复制
上面两步Master和Slave都配置成功了,而且Master也为Slave读取Master数据专门设置了一个账号,下面就来实现同步。
进入Master库查看Master状态
记住File和Position,后面Slave库会在这个文件这个位置进行同步数据。此时一定不要操作Master库,否则将会引起Master状态的变化,File和Position字段也将会进行变化。
进入Slave库执行SQL
启动之后我们来看下有没有成功。
show slave status命令
从这张图很明显看出,对于Slave的两个线程都成功了,那就说明整个MYSQL主从搭建成功了。如果有一个为NO,那就需要到后面看错误日志,是什么原因出错了,解决下就好了。
三、测试
这里简单做一个测试
1、只在Mater 创建一张User表
现在 只在Mater 创建一张User表,如果现在Slave也同样生成这张User表,那就说明成功了。
实际测试结果是成功的。
注意:
这里如果我们先手动在Slave创建这张User表,然后再到Master创建User表那就出事情了。我们按照上面的步骤创建完后,去Slave通过 show slave status 查看
发现 SQL线程都变NO了。原因很简单,错误日志也说明了(Error 'Table 'user' already exists')。因为你在Master创建User表的SQL会记录到bin-log日志中,然后Slave
去读取这个操作,然后写入Slave中的时后发现这个SQL执行失败,因为你Slave已经存在该User表,然后这整个主从复制就卡在这里了。这是个很严重的问题。
所以一旦搭建主从复制成功,只要在Master做更新事件(update、insert、delete),不要在从数据做,否则会出现数据不一致甚至同步失败。
2、Master插入一条数据
再去Slave数据库查看
发现从数据库已经写入成功了。
总结:在搭建的过程可能还有其它的问题出现 你只要在Slave服务器,通过show slave status,如果两个IO是否为YES就代表是否成功,如果有为NO的,后面有字段说明是什么原因导致的,你再根据相关错误信息去查询下解决方案,那就可以了。