1. 拉取mysql镜像
docker pull mysql:5.7
2. 创建挂载目录
mkdir -p /home/mysql/mysql01/data
mkdir -p /home/mysql/mysql01/conf.d
将附件中的 mysqld.cnf 分别拷贝至conf.d中,如果是单主机docker虚拟仨个容器,需改端口port和server-id
mkdir -p /home/mysql/data
mkdir -p /home/mysql/conf.d
3. 使用镜像创建容器东侧可让
docker run --name mysql01 --net=host --privileged=true -v /home/mysql/mysql01/data:/var/lib/mysql -v /home/mysql/mysql01/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root111 -d mysql:5.7
docker run --name mysql02 --net=host --privileged=true -v /home/mysql/mysql02/data:/var/lib/mysql -v /home/mysql/mysql02/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root222 -d mysql:5.7
docker run --name mysql03 --net=host --privileged=true -v /home/mysql/mysql03/data:/var/lib/mysql -v /home/mysql/mysql03/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root333 -d mysql:5.7
# --net=host 单主机docker容器间联系需开放端口
-p 3306:3306 多主机直接开放防火墙端口
docker run --name mysql252 --net=host --privileged=true -v /home/mysql/data:/var/lib/mysql -v /home/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root123 -d mysql:5.7
4. 创建 mysql-master(mysql01)
###进入容器 docker exec -i -t mysql-master /bin/bash
4.1 进入mysql
mysql -p3306 -uroot -p
4.2 创建一个具有slave复制权限的用户:atlp
GRANT REPLICATION SLAVE ON *.* to 'atlp'@'%' identified by 'atlp123';
4.3 刷新权限
flush privileges;
4.4 显示 master 状态,如下图:
show master status;
mysql-bin.000007 15734
mysql-bin.000008 1549476
5. 创建 mysql-slave(mysql02)
###进入容器 docker exec -i -t mysql-slave137 /bin/bash
5.1 进入mysql
mysql -p3306 -uroot -p
5.2 重置slave
stop slave;
reset slave;
change master to master_host='IP地址',master_user='atlp',master_password='atlp123',master_log_file='mysql-bin.000007',master_log_pos=15734;
#master_host:mysql-master 的 ip 地址;
#master_user:在 4.2 中设置的拥有 slave 复制权限的用户:atlp;
#master_password:用户密码;
#master_log_file:在 4.4 图例中的第一列“File”的值;
#master_log_pos: 在 4.4 图例中的第二列“Position”的值;
5.3 启动slave
start slave;
5.4 查看slave状态
show slave status \G
# --Slave_IO_Running和Slave_SQL_Running 即成功
6. 创建mysql-slave(mysql03)
同上
###查看mysql服务器id
show variables like '%server_id%';
###查看docker日志
docker logs -f -t --since="2019-01-17" --tail=100 mysql02
7. 防火墙设置
#添加(--permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --zone=public --add-port=3308/tcp --permanent
#重新载入
firewall-cmd --reload
#查看
firewall-cmd --list-ports
#删除(如果添加错误可以删除)
firewall-cmd --zone= public --remove-port=80/tcp --permanent