1,docker pull 镜像 ,然后创建container
(1)docker pull mysql
(2)docker run -itd --name main_mysql -p 3300:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
(3)docker run -itd --name slave1_mysql -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
(4)docker run -itd --name slave2_mysql -p 3322:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
2, 进入container 然后配置下mysql等
(1)docker ps -a
(2)进入主服务器:docker exec -it baaf95 bash
①安装vim :microdnf install -y vim
②vim /etc/my.cnf
[mysqld]
server-id=100
log-bin=mysql-bin
③重启mysql,这个不知道为啥不行,docker中无法用命令重启,也不知道哪里下载,后面在网上找了下有人说直接重启docker。。。于是我也这个笨办法。:退出docker后,执行 docker restart baaf95
④然后重新docker exec -it baaf95 bash
然后mysql -uroot -p123456
进去
然后show master status;
记住结果中的 mysql-bin.000001 和157
如果mysql >=8.4 需要使用 show binary log status;
(3)配置2个从服务器:docker exec -it c736cef64e7b bash
和docker exec -it 05f7c3f4aa6b bash
①第一步同上面的第一步:安装vim :microdnf install -y vim
②vim /etc/my.cnf
[mysqld]
server-id=101
log-bin=mysql-slave-bin
relay_log=edu-mysql-relay-bin
③然后重启mysql 同上
(4)查找主节点的ip地址
docker inspect --format='{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' main_mysql
结果是172.17.0.2
(5)在主节点上去建用户名!
①create user slave identified with mysql_native_password by '123456';
②grant replication slave on *.* to slave;
③flush privileges;
(6)开始去构建主从关系:在其中一台上运行,另外一台也一样
①change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 157, master_connect_retry=30;
②flush privileges;
③show slave status \G;
④start slave;
再次 show slave status;
⑤可能会出现的错误:如果用户名之前配置的不对 ,比如直接create user slave identified by ‘123456’;就会出现
error connecting to master ‘slave@172.17.0.2:3306’ - retry-time: 30 retries: 1 message: Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection. 这样的错误,所以刚才创建用户不要用原始的identified by
然后主库中添加更新,2个从库就可以跟着改了。本地实验过可以。
这仅为学习只用,没有实战过。。。
参考文档:https://blog.csdn.net/xizhen2791/article/details/123660049
===========发现现在docker上最新版本 mysql8.4 会有一些问题,列出来
1,show master status
要改成show binary log status
2,change master to master_host=‘172.17.0.2’, master_user=‘slave’, master_password=‘123456’, master_port=3306, master_log_file=‘mysql-bin.000001’, master_log_pos= 157, master_connect_retry=30;
要改成
CHANGE REPLICATION SOURCE TO
SOURCE_HOST=‘172.17.0.2’, SOURCE_USER=‘slave’, SOURCE_PASSWORD=‘123456’, SOURCE_PORT=3306, SOURCE_LOG_FILE=‘mysql-bin.000001’,SOURCE_LOG_POS=157;
3,stop slave ; start slave; 都要改成stop replica ; start replica
4, show slave status改成show replica status