一,mysql-master创建,并创建从库连接用户'testSlave'@'%'
#--name指定运行之后的容器的名称为mysql-master;
#--privileged指定了当前容器是否真正的具有root权限,所谓的root权限是指具有宿主机的root权限,而不仅仅只是在容器内部有root权限;
#-v指定了容器中指定目录挂载到宿主机上的某个目录,这样做的目的在于防止容器中配置的数据丢失,因为docker容器在重启之后是不会保留前一次在其内部运行的相关数据的;
#-p表示宿主机上的某个端口映射到docker容器内的某个端口,这里也就是将宿主机的3306端口映射到容器内部的3306端口;
#-e表示指定当前容器运行的环境变量,该变量一般在容器内部程序的配置文件中使用,而在外部运行容器指定该参数。这里的MYSQL_ROOT_PASSWORD表示容器内部的MySQL的启动密码;
#-d参数指定了当前容器是在后台运行。
#mysql:latest mysql最新版本,
docker run --name mysql-master --privileged=true -v /home/mysql/master-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Root2021 -d mysql:latest
docker ps
docker exec -it mysql-master /bin/bash
mysql -uroot -pRoot2021
create user 'testSlave'@'%' identified by 'Root2021';
#这里是我之前创建过一次,所以出现用户已经存在,删掉重新创建就好了
drop user'testSlave'@'%';
create user 'testSlave'@'%' identified by 'Root2021';
#这里需要指定 mysql_native_password 不然文章结尾有踩坑经历
alter user 'testSlave'@'%' identified with mysql_native_password by 'Root2021';
flush privileges;
二,查看master的binlog与Position 。
#接着在mysql-master命令行下执行
show master status;
这里不知道这两个值的含义,就顺便扒了以下主从复制的原理,来源 : 主从复制的原理
三,创建从库
docker run --name mysql-slave --privileged=true -v /home/mysql/slave-data:/var/lib/mysql -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=Root2021 -d mysql:latest
docker ps
docker exec -it mysql-slave /bin/bash
mysql -uroot -pRoot2021
#这里的master_log_file 与 master_log_pos 就是之前查看的master的值
change master to master_host='master', master_user='testSlave', master_password='Root2021', master_port=3306, master_log_file='binlog.000003', master_log_pos=1112, master_connect_retry=30;
start slave;
#这里也是因为我之前搭建过一次,所以重新拉起需要reset
reset slave;
#查看从库连接状态
show slave status\G;
不出意外的话应该是下面这种情况
error : The slave I/O thread stops because master and slave have equal MySQL server ids
四,配置主从的server_id 与 server_uuid,注意需要不一致
分别查看主从库的server_id 与 server_uuid,左边从库,右边主库,发现server_id一致
show variables like 'server_id';
show variables like '%server_uuid%';
修改从库server_id
set global server_id=2;
再次查看连接状态
五,赋予'testSalve'@'%'账户复制的权限
进入主库
docker exec -it mysql-master /bin/bash
mysql -uroot -pRoot2021
# ★★★★★记得切到mysql数据库★★★★★
use mysql;
show grants for 'testSlave'@'%';
grant replication slave on *.* to 'testSlave'@'%';
show grants for 'testSlave'@'%';
修改完成后进入从库查看连接情况
docker exec -it mysql-slave /bin/bash
mysql -uroot -pRoot2021
show slave status\G;
六,测试主从同步,
左边主库操作,右边从库查看
七,Authentication plugin 'caching_sha2_password' report error
主库'testSalve'@'%'的密码加密方式不对,需要修改