Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一、搭建虚拟机
- 拉取镜像
docker pull mysql:5.7 - 创建主节点
docker run -p 3307:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 - 创建从节点
docker run -p 3308:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 - 使用navicat连接测试,主机写主机IP或localhost或127.0.0.1


- 进入主节点
docker exec -it mysql-master /bin/bash - 进入从节点
docker exec -it mysql-slave /bin/bash
二、虚拟机初始配置
- 升级apt库,否则无法安装应用
apt-get update - 安装ping命令
apt-get install inetutils-ping - 安装ifconfig命令
apt-get install net-tools - 安装ps命令
apt-get install procps
三、主节点设置
- 编辑/etc/mysql/my.cnf,加入以下内容:
1 | [mysqld] |
- 重启mysql服务
service mysql restart - 启动docker容器
docker start mysql-master - 进入容器
docker exec -it mysql-master /bin/bash - 新建主从复制用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; - 授予slave用户权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; - 查看主节点状态
show master status;
四、从节点设置
- 编辑/etc/mysql/my.cnf,加入以下内容:
1 | [mysqld] |
- 重启mysql服务
service mysql restart - 启动docker容器
docker start mysql-slave - 进入容器
docker exec -it mysql-slave /bin/bash - 复制准备
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= n, master_connect_retry=30;- master_log_pos=n,n值为
show master status结果中Position值
- master_log_pos=n,n值为
- 开始执行复制
start slave; - 查看复制状态
show slave status \G;,SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。
五、遇到的问题
- Slave_SQL_Running: No
原因
- 程序可能在slave上进行了写操作
- 也可能是slave机器重起后,事务回滚造成的
解决方法一
- stop slave ;
- set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
- start slave ;
解决方法二
- 停止从库复制
stop slave; - 查看主库状态
show master status; - 重新配置准备,修改File和Position对应的值
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= n, master_connect_retry=30;