用 Docker 构建 MySQL 主从环境
source link: https://segmentfault.com/a/1190000023336513
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
前言
本篇文章记录我使用 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 主从架构所记录的步骤,如果有卡在哪一步,可以留言与我交流。:blush::blush::blush:
很遗憾的说,推酷将在这个月底关闭。人生海海,几度秋凉,感谢那些有你的时光。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK