目录
1. 安装配置master
1.1. 运行mysql容器
1.2. 更新基础软件和安装vim
1.3. 编辑配置文件
1.4. 创建用户并授权,用于再主从库之间同步数据
2. slave数据库安装配置
2.1. 运行容器
2.2. 进入容器内部
2.2. 更新基础软件和安装vim
2.3. 编辑配置文件
2.4. 进入mysql内部,设置主从信息
2.5. 查看主从同步状态
2.6. 开启主从复制
2.7. 再次查询主从同步状态
3. 出现异常参考
docker run -itd --name mysqlMaster3307 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root mysql:latest
参数介绍:
apt-get update apt-get install vim -y
vim /etc/mysql/my.cnf
新增信息
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 永久设置时区时间
default-time_zone = '+8:00'
退出保存
:wq
进入mysql内部
mysql -uroot -proot
创建同步用户
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave';
授予权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
备注:
如果本地要用客户端比如Navicat连接,最好设置root的认证方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
否则可能报错
2059 - authentication plugin 'caching_sha2_password' cannot be loaded...
1.5. 查看关键信息
查看两个关键信息,File和Position字段的值,在后面的操作完成之前,需要保证master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。
show master status;
退出mysql
exit
退出容器
exit
重启容器
docker restart 5c2
至此,master数据库安装配置完成。
docker run -itd --name slave0_3308 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root mysql:latest
docker exec -it 3bb /bin/bash
apt-get update
apt-get install vim -y
vim /etc/mysql/my.cnf
新增信息
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## 永久设置时区时间
default-time_zone = '+8:00'
进入mysql内部
mysql -uroot -proot
注:如果本地要用客户端比如navicat连接,最好设置root的认证方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
设置主从信息
change master to master_host='172.17.0.4', master_user='slave', master_password='slave', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 156, master_connect_retry=30,get_master_public_key=1;
参数介绍:
[root@localhost ~]# docker inspect --format='{{.NetworkSettings.IPAddress}}' 5c2 172.17.0.4
备注:之所以设置get_master_public_key=1,是因为开启主从复制的时候可能会报出下方的异常。原因是mysql8默认使用插件caching_sha2_password,有些client连接报这个错误,需要拿到server的public key来加密password
ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
show slave status \G;
正常情况下,Slave_IO_Running 和 Slave_SQL_Running 都是No,因为我们还没有开启主从复制的过程
start slave;
show slave status \G;
然后退出重启容器。其他的slave的安装配置方法和slave的方法一样,区别就是cnf文件中的server-id不能相同罢了。
3.1. 使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于拦截状态,这种情况一般是下面集中原因造成的,可以根据Last_IO_Error提示予以排除。
解决办法:检查IP,端口
检查是否创建用于同步的用户和用户密码是否正确
检查master的position
3.2. 如果开启主从复制失败,需要修改和重启,可参考下方提示
停止主从复制
stop slave;
重置之前的配置信息
reset slave;
启动主从复制
start slave;
备注:
如果不重置修改后直接启动可能会报出下方异常
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
3.3. Navicat 连接MySQL 8.0.11 出现2059错误
参考连接:https://www.cnblogs.com/lifan1998/p/9177731.html
原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password
解决:更改加密规则
mysql -uroot -ppassword #登录
use mysql; #选择数据库
# 远程连接请将'localhost'换成'%'
#更改加密方式
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
#更新用户密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
#刷新权限
FLUSH PRIVILEGES;
参考连接:https://blog.csdn.net/qq_32574435/article/details/105921029
问题交流群,不定期分享各种技术文档:
QQ群号:464512055
群二维码:
这是一个神器的二维码,扫描之后你会少掉一块钱。