前言

本篇文章记录我使用 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主从内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

标签:
Docker构建MySQL主从,Docker,MySQL主从

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“详解用Docker构建MySQL主从环境”
暂无“详解用Docker构建MySQL主从环境”评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。