前言
本篇文章记录我应用 docker-compose 以及 dockerfile 来构建基于 binlog 的 MySQL 主从环境。如果你严格依照文中的步骤进行配置,置信很快就能够搭建好一个根底的 MySQL 主从环境。
介绍
MySQL 主从同步分为 3 个步骤:
- master 节点将数据的更新记录写到 binary log 中。
- slave 节点开启 IO 线程连贯 master 节点并把 master 节点的 binary log 读出来写到本人的 relay log 中。
- 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
运行上述命令进行容器创立,如果构建工夫过长,能够思考更换镜像源,例如上面几个国内优质镜像源:
- 网易:http://hub-mirror.c.163.com
- 阿里云:http://< 你的 ID>.mirror.aliyuncs.com
- 中国科学技术大学: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 主从架构所记录的步骤,如果有卡在哪一步,能够留言与我交换。????????????