![ed512787e51e17b19d447eb6fb794aaa.png](https://i-blog.csdnimg.cn/blog_migrate/208b9788f91c9abc8220b50df65d17b8.jpeg)
docker pull mysql:5.7
也可以拉取最新的mysql镜像
![e9991075e036a925168daa56171554b0.png](https://i-blog.csdnimg.cn/blog_migrate/9d777d62c5ff04130b0d765986ddff58.jpeg)
mkdir -p /usr/mysql/master
mkdir -p /usr/mysql/slave
mkdir -p /usr/mysql/slave2
![1bd15ed856c174b9130a126bc3011199.png](https://i-blog.csdnimg.cn/blog_migrate/e31a315e5e0c8897d8e785dd44dbf667.jpeg)
FROM mysql
COPY my.cnf /etc/mysql/
EXPOSE 3306
CMD ["mysqld"]
![fd58c95a94f4cf935dfb05db52290b04.png](https://i-blog.csdnimg.cn/blog_migrate/5ccc950691723fb7183157f338d12e47.jpeg)
[mysqld]
log-bin=mysql-bin
server-id=1 //server-id必须三个文件都不同,唯一
![168f0407c68450ae74206ce847c04da9.png](https://i-blog.csdnimg.cn/blog_migrate/968902af4224a5834d7be0e1c94da2ba.jpeg)
docker build -t master/mysql .
docker build -t master/slave .
docker build -t master/slave2 .
后面的点不要忘记
![8415961323f11cc78b598a304589c811.png](https://i-blog.csdnimg.cn/blog_migrate/31720885dc60534bf5302be1163b9db7.jpeg)
docker run -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=root -d master/mysql
docker run -p 3307:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=root -d slave/mysql
docker run -p 3308:3306 --name mysql-slave2 -e MYSQL_ROOT_PASSWORD=root -d slave2/mysql
![dedabb3d7ed49197c16783af4c3fb630.png](https://i-blog.csdnimg.cn/blog_migrate/87c63d603cb1cd8bdcdb02bb08ce6955.jpeg)
mysql>GRANT REPLICATION SLAVE ON *.* TO 'user'@'192.168.99.100' IDENTIFIED BY 'mysql';(指定ip)
或者
mysql>GRANT REPLICATION SLAVE ON *.* to 'user'@'%' identified by 'mysql';(所有ip)
然后查看服务器状态show master status;
![0af767375542e467a0aaf45e03603c01.png](https://i-blog.csdnimg.cn/blog_migrate/71c796ea05e19585cb3e6a911b357f28.jpeg)
这时,不要在对对主节点进行任何数据操作
![de45113d5e95a626955a89093fda4cfb.png](https://i-blog.csdnimg.cn/blog_migrate/4341d6c6058192403813e74280587e13.jpeg)
查询主服务ip
docker inspect --format='{{.NetworkSettings.IPAddress}}'
在从服务器分别执行
change master to
master_host='172.17.0.2',
master_user='root',
master_password='root',
master_port=3306,
master_log_file='mysql-bin.000004', master_log_pos=154
master_connect_retry=30;
![aafb5a84226b782f388d2cc2f4022fcf.png](https://i-blog.csdnimg.cn/blog_migrate/c15d49fb3f730fbf2d0614f8b71ce2d3.jpeg)
MASTER_HOST,MASTER_USER,MASTER_PASSWORD,MASTER_PORT四个选项提供了slave从机连接到master主机的信息。
MASTER_HOST 与 MASTER_PORT:
分别代表master主机名(或IP地址)及mysql实例端口号。
MASTER_USER 与 MASTER_PASSWORD:
连接到master主机复制账户所对应的用户名及密码。
MASTER_LOG_FILE 与 MASTER_LOG_POS:
这两项确定slave的io线程下次开始执行时从master开始读取的位置坐标。
MASTER_CONNECT_RETRY:
重连到master时的超时等待时间,默认为60秒。
![d46e01de722a0a002076077ff2115214.png](https://i-blog.csdnimg.cn/blog_migrate/85cfffbd5684b604f8ee4810d9ca2b83.jpeg)
start slave;
show slave status\G
![69c365a157053d3291245a6190abe505.png](https://i-blog.csdnimg.cn/blog_migrate/ead4a6a8fcfbe72cea155a4c12d7f2aa.jpeg)
这两个必须是 Yes 为 No 或者 connect 说明没有连接上
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
![cb01b6e3643757f2b5bd7514ce61c857.png](https://i-blog.csdnimg.cn/blog_migrate/495420d083ecfcbed360b2b57837604f.jpeg)
到这里已经搭建完毕,接下去就是测试了。在主节点创建一张表,会在从节点看见新增一张表。