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;