DDR爱好者之家 Design By 杰米

前言

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

介绍

详解用Docker构建MySQL主从环境

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

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

配置

创建目录结构

首先先搞定目录结构,我的目录结构如下,如果想按照自己的想法来组建目录,在下文中的 docker-compose.yaml 文件与 Dockerfile 文件要注意修改文件路径。

详解用Docker构建MySQL主从环境

配置 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

运行上述命令进行容器创建,如果构建时间过长,可以考虑更换镜像源,例如下面几个国内优质镜像源:

网易: http://hub-mirror.c.163.com

阿里云: http://&lt ;你的ID>.mirror.aliyuncs.com

中国科学技术大学: http://docker.mirrors.ustc.ed...

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

详解用Docker构建MySQL主从环境

配置 slave 节点

详解用Docker构建MySQL主从环境

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

详解用Docker构建MySQL主从环境

接下来使用 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 节点状态,出现如下情形可认为配置成功。

详解用Docker构建MySQL主从环境

测试主从节点同步状态

详解用Docker构建MySQL主从环境

登录到 mysql-master 节点,创建一个全新的库,创建成功之后,切换到 mysql-slave 节点,输入 show databases; 命令,查看是否成功同步,出现如下情形则配置成功。其他操作可以自己尝试,这里不再做演示。

详解用Docker构建MySQL主从环境

总结

这是我自己尝试搭建 MySQL 主从架构所记录的步骤,到此这篇关于详解用Docker构建MySQL主从环境的文章就介绍到这了,更多相关Docker构建MySQL主从内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?