我都docker版本号
[root@iz2zec8miiew8671q6vst1z ~]# docker -v
Docker version 1.13.1, build 7f2769b/1.13.1
安装mysql博客
参考我之前的博客拉取镜像即可,先不要run
我们基于阿里云搭建mysql主从
master:
docker run -p 3301:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
slave:
docker run -p 3302:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
此时docker ps 即可出现如下运行的实例
此时去客户端navicat去测一下能连接上就ok
进入docker里面的实例去配置
docker exec -it 333bab234866/bin/bash //333bab234866为容器ID
docker exec -it mysql-master /bin/bash //mysql-master为容器名称
apt-get update
apt-get install vim
下载完后去编辑当前目录下的 my.cnf 文件,添加如下
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=master-bin
binlog-format=ROW // 二级制日志格式,有三种 row,statement,mixed
binlog-do-db=数据库名 //同步的数据库名称,如果不配置,表示同步所有的库
修改完后,重启mysql服务刷新配置
service mysql restart
然后重启docker容器
docker start mysql-master
使用docker命令重新进入到Master容器内部:
docker exec -it mysql-master /bin/bash
在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。登录到mysql客户端:
mysql -uroot -p123456
创建新用户授权
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
参照Master先修改my.cnf 然后重启mysql服务,然后在重启容器
修改my.cnf 为如下
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=mysql-relay-bin
read_only=1 ## 设置为只读,该项如果不设置,表示slave可读可写
进去Master的mysql 输入show master status
记录下如下数据,在之后复制有需要
再进去Slave的mysql 输入以下
change master to master_host='172.18.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='master-bin.000001', master_log_pos=617, master_connect_retry=30;
命令解释如下
docker inspect --format='{ {.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP
在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。
上图为未开启主从模式
Slave_IO_Running 和 Slave_SQL_Running是查看主从是否运行的关键字段,默认为NO,表示没有进行主从复制。
使用start slave;开启主从复制过程,然后再次查询主从同步状态show slave status \G;
使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。