详解用Docker构建MySQL主从环境

时间:2021-11-06 10:56:49

前言

本篇文章记录我使用 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 模版文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 文件

?
1
2
3
4
5
6
7
8
9
10
11
12
[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
?
1
2
3
from mysql:latest
add ./mysql/master/cluster.cnf /etc/mysql/conf.d/cluster.cnf
env mysql_root_password=password

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[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
?
1
2
3
from mysql:latest
add ./mysql/slave/cluster.cnf /etc/mysql/conf.d/cluster.cnf
env mysql_root_password=password

创建容器

?
1
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 连接。

?
1
2
3
4
5
6
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主从内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://segmentfault.com/a/1190000023336513