Docker 搭建 Mysql8 数据库的主从同步

一,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;


Docker 搭建 Mysql8 数据库的主从同步

二,查看master的binlog与Position 。

#接着在mysql-master命令行下执行
show master status;

Docker 搭建 Mysql8 数据库的主从同步

这里不知道这两个值的含义,就顺便扒了以下主从复制的原理,来源 : 主从复制的原理

Docker 搭建 Mysql8 数据库的主从同步

三,创建从库

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;

 Docker 搭建 Mysql8 数据库的主从同步

 Docker 搭建 Mysql8 数据库的主从同步

#查看从库连接状态
show slave status\G;

不出意外的话应该是下面这种情况

error : The slave I/O thread stops because master and slave have equal MySQL server ids

 Docker 搭建 Mysql8 数据库的主从同步

 四,配置主从的server_id 与 server_uuid,注意需要不一致

 分别查看主从库的server_id 与 server_uuid,左边从库,右边主库,发现server_id一致

show variables like 'server_id';

show variables like '%server_uuid%';

Docker 搭建 Mysql8 数据库的主从同步

修改从库server_id 

set global server_id=2;

Docker 搭建 Mysql8 数据库的主从同步

再次查看连接状态

Docker 搭建 Mysql8 数据库的主从同步

 五,赋予'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 搭建 Mysql8 数据库的主从同步

修改完成后进入从库查看连接情况

docker exec -it mysql-slave /bin/bash

mysql -uroot -pRoot2021

show slave status\G;

Docker 搭建 Mysql8 数据库的主从同步

六,测试主从同步,

左边主库操作,右边从库查看

Docker 搭建 Mysql8 数据库的主从同步

 七,Authentication plugin 'caching_sha2_password' report error

Docker 搭建 Mysql8 数据库的主从同步

 主库'testSalve'@'%'的密码加密方式不对,需要修改

Docker 搭建 Mysql8 数据库的主从同步

上一篇:11.


下一篇:redis slave.conf