Mysql系列学习〖一〗基于Docker的Mysql主从复制搭建

Mysql系列学习〖一〗基于Docker的Mysql主从复制搭建

      • 一. 前置工作
        • 1.1 安装docker
        • 1.2 拉取mysql镜像
      • 二. 集群搭建
        • 2.1 主从运行
        • 2.2 Master配置
      • 三. 配置Slave
      • 四. 开启主从复制功能
      • 五. 踩坑

一. 前置工作

1.1 安装docker

我都docker版本号

[root@iz2zec8miiew8671q6vst1z ~]# docker -v
Docker version 1.13.1, build 7f2769b/1.13.1

1.2 拉取mysql镜像

安装mysql博客
参考我之前的博客拉取镜像即可,先不要run

二. 集群搭建

我们基于阿里云搭建mysql主从

2.1 主从运行

master:

docker run -p 3301:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • –name 重命名
  • -p 端口映射 宿主机端口:容器端口
  • -e MYSQL_ROOT_PASSWORD=123456 设置密码
  • -d 选择我们之前拉取的镜像

slave:

docker run -p 3302:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

此时docker ps 即可出现如下运行的实例
在这里插入图片描述
此时去客户端navicat去测一下能连接上就ok

2.2 Master配置

进入docker里面的实例去配置

docker exec -it 333bab234866/bin/bash		 //333bab234866为容器ID
docker exec -it mysql-master /bin/bash		 //mysql-master为容器名称

切换到如下目录
在这里插入图片描述
这里容器会没有vim 先下载一个

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系列学习〖一〗基于Docker的Mysql主从复制搭建_第1张图片

修改完后,重启mysql服务刷新配置

service mysql restart
  • 此处容易重启失败,我这踩了坑,要是容器启动不起来,那就肯定是配置的原因,但是你又没办法进去,此时需要你手动将刚才容器配置错误的文件拉出来,修改完后在改进去
    参照此处命令即可
  • 也可以将my.cnf 清空再复制回去

然后重启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)

三. 配置Slave

参照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;

命令解释如下

  • master_host: 主机IP 若为两台阿里云就写公网IP即可,若为一台输入一下命令获取docker inspect --format='{ {.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP
  • master_port:Master的端口号,指的是容器的端口号
  • master_user:用于数据同步的用户
  • master_password:用于同步的用户的密码
  • master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
  • master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
  • master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。
Mysql系列学习〖一〗基于Docker的Mysql主从复制搭建_第2张图片
上图为未开启主从模式

  • Slave_IO_Running 和 Slave_SQL_Running是查看主从是否运行的关键字段,默认为NO,表示没有进行主从复制。

  • 使用start slave;开启主从复制过程,然后再次查询主从同步状态show slave status \G;

Mysql系列学习〖一〗基于Docker的Mysql主从复制搭建_第3张图片
使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。

Mysql系列学习〖一〗基于Docker的Mysql主从复制搭建_第4张图片
以上为正常开启,可以自己去试试哦\

五. 踩坑

  • mysql同步报错 Error ‘Operation CREATE USER failed for ‘zhangsan’@’%’’ on query. 点击此处

你可能感兴趣的:(Mysql,mysql,主从复制,docker搭建mysql,docker,主从)