用 Docker 构建 MySQL 主从环境

前言

本篇文章记录我使用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境。若是你严格按照文中的步骤进行配置,相信很快就能够搭建好一个基础的 MySQL 主从环境。mysql

介绍


MySQL 主从同步分为 5 个步骤:sql

  1. master 节点将数据的更新记录写到 binary log 中。
  2. slave 节点开启 IO 线程链接 master 节点,请求获取指定 binary log 文件的指定位置以后的日志。
  3. master 节点的 binary log dump 线程将指定的 binary log 信息推送给 slave 节点。
  4. slave 节点的 IO 线程接收到消息后,将日志内容写入 relay log 文件。
  5. slave 节点的 SQL 线程检测到 relay log 新增了内容,立刻解析 relay log 文件生成相应的 SQL 语句,并将这些 SQL 语句重放到数据库,保证主从数据一致性。

配置

建立目录结构

首先先搞定目录结构,个人目录结构以下,若是想按照本身的想法来组建目录,在下文中的 docker-compose.yaml 文件与 Dockerfile 文件要注意修改文件路径。
docker

配置 docker-compose 模版文件

version: "3"
services:
  mysql-master:
    build:
      context: ./
      dockerfile: mysql/master/Dockerfile
    container_name: mysql-master
    volumes:
      - ./mysql/master/data:/var/lib/mysql
    restart: always
    ports:
      - 3305:3306
    links:
      - mysql-slave

  mysql-slave:
    build:
      context: ./
      dockerfile: mysql/slave/Dockerfile
    container_name: mysql-slave
    volumes:
      - ./mysql/slave/data:/var/lib/mysql
    restart: always
    ports:
      - 3306:3306

配置 master 节点的 cluster.cnf 文件以及 Dockerfile 文件

[mysqld]
server_id=100
binlog-ignore-db=mysql
log-bin=replicas-mysql-bin
binlog_cache_size=1M
binlog_format=mixed
slave_skip_errors=1062

# 个人 MySQL 为 8.x,须要以下配置
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
FROM mysql:latest
ADD ./mysql/master/cluster.cnf /etc/mysql/conf.d/cluster.cnf
ENV MYSQL_ROOT_PASSWORD=password

配置 slave 节点的 cluster.cnf 文件以及 Dockerfile 文件

[mysqld]
server_id=101
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=mixed
slave_skip_errors=1062
relay_log=replicas-mysql-relay-bin
log_slave_updates=1
read_only=1

# 个人 MySQL 为 8.x,须要以下配置
default_authentication_plugin=mysql_native_password
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
FROM mysql:latest
ADD ./mysql/slave/cluster.cnf /etc/mysql/conf.d/cluster.cnf
ENV MYSQL_ROOT_PASSWORD=password

建立容器

docker-compose up -d mysql-master mysql-slave

运行上述命令进行容器建立,若是构建时间过长,能够考虑更换镜像源,例以下面几个国内优质镜像源:数据库

  1. 网易:http://hub-mirror.c.163.com
  2. 阿里云:http://<你的ID>.mirror.aliyuncs.com
  3. 中国科学技术大学:http://docker.mirrors.ustc.ed...

构建完成以后,使用 docker ps 命令查看一下容器是否正常运行,出现以下情形则能够认为已经构建成功。
bash

配置 slave 节点


首先使用 docker 命令进入到 mysql-master 容器中,再登陆到 mysql 输入 show master status 命令获取主库状态,这里咱们要关心两个参数 File 以及 Position,以后配置从库会用到这两个参数。

接下来使用 docker 命令进入 mysql-slave 容器,再登陆到 mysql 输入如下语句进行与 mysql-master 链接。架构

CHANGE MASTER TO
    MASTER_HOST='mysql-master',
    MASTER_USER='root',
    MASTER_PASSWORD=你设置的密码,
    MASTER_LOG_FILE=上一步获得的 File 参数,
    MASTER_LOG_POS=上一步获得的 Position 参数;

输入完成后再键入 start slave 命令启动 slave 服务。启动以后输入 show slave status \G 命令查看 slave 节点状态,出现以下情形可认为配置成功。
测试

测试主从节点同步状态


登陆到 mysql-master 节点,建立一个全新的库,建立成功以后,切换到 mysql-slave 节点,输入 show databases; 命令,查看是否成功同步,出现以下情形则配置成功。其余操做能够本身尝试,这里再也不作演示。
ui

总结

这是我本身尝试搭建 MySQL 主从架构所记录的步骤,若是有卡在哪一步,能够留言与我交流。😊😊😊阿里云

相关文章
相关标签/搜索