乐趣区

关于mysql:用-Docker-构建-MySQL-主从环境

前言

本篇文章记录我应用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境。如果你严格依照文中的步骤进行配置,置信很快就能够搭建好一个根底的 MySQL 主从环境。

介绍


MySQL 主从同步分为 3 个步骤:

  1. master 节点将数据的更新记录写到 binary log 中。
  2. slave 节点开启 IO 线程连贯 master 节点并把 master 节点的 binary log 读出来写到本人的 relay log 中。
  3. slave 节点开启 SQL 线程读取 relay log 并解析执行,执行实现后,更新同步的地位标记位。

配置

创立目录构造

首先先搞定目录构造,我的目录构造如下,如果想依照本人的想法来组建目录,在下文中的 docker-compose.yaml 文件与 Dockerfile 文件要留神批改文件门路。

配置 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 命令查看一下容器是否失常运行,呈现如下情景则能够认为曾经构建胜利。

配置 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; 命令,查看是否胜利同步,呈现如下情景则配置胜利。其余操作能够本人尝试,这里不再做演示。

总结

这是我本人尝试搭建 MySQL 主从架构所记录的步骤,如果有卡在哪一步,能够留言与我交换。????????????

退出移动版