首先在docker里创建三个容器master,slave01,slave02,并且分别映射到3308,3309,3310端口(在安全组里开放这些端口)
Linux> docker run –name master -p 3308:3306 -v /root/docker/volumes/etc/master/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/master/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/master/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riCXT8zM -d mysql:latest
Linux> docker run –name slave01 -p 3309:3306 -v /root/docker/volumes/etc/slave01/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave01/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave01/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave01:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riDYQ8zM -d mysql:latest
Linux> docker run –name slave02 -p 3310:3306 -v /root/docker/volumes/etc/slave02/my.cnf:/etc/my.cnf -v /root/docker/volumes/etc/slave02/my.cnf.d:/etc/mysql/my.cnf.d -v /root/docker/volumes/etc/slave02/conf.d:/etc/mysql/conf.d -v /root/docker/volumes/var/lib/slave02:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=riEZG8zM -d mysql:latest
从master容器中复制默认的my.cnf配置文件到宿主机的对应目录
从slave01容器中复制默认的my.cnf配置文件到宿主机的对应目录
从slave02容器中复制默认的my.cnf配置文件到宿主机的对应目录
docker cp master:/etc/my.cnf /root/docker/volumes/etc/master/my.cnf
docker cp slave01:/etc/my.cnf /root/docker/volumes/etc/master/my.cnf
docker cp slave02:/etc/my.cnf /root/docker/volumes/etc/slave02/my.cnf
接着我们要记住这三段命令,分别是进入主机,从一和从二容器的数据库
(docker exec -it master mysql -uroot -priCXT8zM
docker exec -it slave01 mysql -uroot -priDYQ8zM 从1
docker exec -it slave02 mysql -uroot -priEZG8zM 丛2)
1. 配置 slave01(第一个从服务器)
bash
docker exec -it slave01 /bin/bash
- 进入
slave01容器的交互式终端(/bin/bash)。
bash
cat /etc/mysql/my.cnf
- 查看
my.cnf文件内容,确认当前配置。
bash
sed -i '$a server_id=2' /etc/mysql/my.cnf
- 使用
sed在my.cnf文件末尾($a表示 “append at end”)添加server_id=2。 -i表示直接修改文件(而不是输出到终端)。
bash
docker restart slave01
- 重启
slave01容器,使server_id配置生效。
sql(docker exec -it slave01 mysql -uroot -priDYQ8zM )
mysql> show variables like 'server_id';
进入 MySQL 命令行(假设已经运行 mysql -uroot -p),查询 server_id 的值,确认是否已设置为 2。
+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id | 2 |
+—————+——-+
2. 配置 slave02(第二个从服务器)
bash
docker exec -it slave02 /bin/bash
- 进入
slave02容器的交互式终端。
bash
cat /etc/mysql/my.cnf
- 查看
my.cnf文件内容。
bash
sed -i '$a server_id=3' /etc/mysql/my.cnf
- 在
my.cnf文件末尾追加server_id=3(确保server_id唯一,不能与master或slave01重复)。
bash
docker restart slave02
- 重启
slave02容器,使新配置生效。
sql(docker exec -it slave02 mysql -uroot -priEZG8zM)
mysql> show variables like 'server_id';
进入 MySQL 命令行,检查 server_id 是否已设置为 3
+—————+——-+
| Variable_name | Value |
+—————+——-+
| server_id | 3 |
+—————+——-+
3.进入主服务器
docker exec -it master mysql -uroot -priCXT8zM
查看主服务配置mysql> show master status;
回到从1,从二输入change master to
master_port=3308,
master_user=’root’,
master_password=’riCXT8zM’,
master_host=’121.41.121.147′,
master_log_file=’binlog.000003′,
master_log_pos=1054;
这里的端口为主机端口,用户为主机用户,密码为主机密码,地址为云服务器公网地址,log_file和log_pos都是在主机上查看的配置。
到这里mysql> start slave;启动服务
查看是否配置成功?
mysql> show slave status \G;
此时如果是Slave_IO_Running: Yes
Slave_SQL_Running: Yes
则成功,如果io是connecting,则接着操作
停止服务,stop slave;
进入主机执行
ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘Master@123’;
FLUSH PRIVILEGES; #这时候数据库密码都改成了Master@123
再次进入主机的mysql查看配置
docker exec -it master mysql -uroot -priCXT8zM#密码也可能是Master@123
show master status;
在从一从二中重新配置在启动服务即可