- MySQL 5.7.13
- Docker 1.13.1
- 接下来,我们将会在一台服务器上安装docker,并使用docker运行三个MySQL容器,分别为一主两从。
- 执行命令:yum install docker
- 如果有提示,一路y下去
- 安装成功后,查看版本:docker version
- systemctl start docker.service #启动服务
docker pull mysql:5.7.13
1.5 运行主容器masterdocker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13
- –name 为容器指定名称,这里是master
- -p 将容器的指定端口映射到主机的指定端口,这里是将容器的3306端口映射到主机的3306端口
- -e 设置环境变量,这里是指定root账号的密码为123456
- -d 后台运行容器,并返回容器ID
- mysql:5.7.13 指定运行的mysql版本
- docker ps -a 显示所有的容器,包括未运行的
- 开放3306端口
- firewall-cmd --zone=public --add-port=3306/tcp --permanent
- firewall-cmd --reload
- 使用Navicat连接测试
使用Navicat图像化界面执行SQL
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup'; show grants for 'backup'@'%';
出现如下信息表示授权成功
-
创建配置文件目录
-
目录结构如下
-
/usr/mysql/master
-
/usr/mysql/slave1
-
/usr/mysql/slave2
-
拷贝一份MySQL配置文件
docker cp master:/etc/mysql/my.cnf /usr/mysql/master/my.cnf
- 修改my.cnf,在 [mysqld] 节点最后加上后保存
log-bin=mysql-bin
server-id=1 - 将修改后的文件覆盖Docker中MySQL中的配置文件
docker cp /usr/mysql/master/my.cnf master:/etc/mysql/my.cnf
- 重启 mysql 的docker , 让配置生效
- docker restart master
- 首先运行从容器slave1
docker run --name slave1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.13
- 开放3307端口
firewall-cmd --zone=public --add-port=3307/tcp --permanent
firewall-cmd --reload - 拷贝一份MySQL配置文件
docker cp slave1:/etc/mysql/my.cnf /usr/mysql/slave1/my.cnf - 修改my.cnf,在 [mysqld] 节点最后加上后保存
log-bin=mysql-bin
server-id=2 - 将修改后的文件覆盖Docker中MySQL中的配置文件
docker cp /usr/mysql/slave1/my.cnf slave1:/etc/mysql/my.cnf
- 重启 mysql 的docker , 让配置生效
- docker restart slave1
使用Navicat连接slave1后新建查询,执行以下SQL
CHANGE MASTER TO MASTER_HOST='192.168.201.101', MASTER_PORT=3306, MASTER_USER='backup', MASTER_PASSWORD='backup';
MASTER_HOST 填Navicat连接配置中的ip应该就可以
MASTER_PORT 主容器的端口
MASTER_USER 同步账号的用户名
MASTER_PASSWORD 同步账号的密码
1.11 检查是否配置成功show slave status;
- 如果都是Yes,那么恭喜你,可以测试主从复制的效果了,如果有一个不是Yes,一半是重启从容器后,事务回滚引起的,那么给出解决方法如下
stop slave ; set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; start slave ;1.12运行MySQL从容器slave2与slave1同理



