用 Docker 构建 MySQL 主从环境

栏目: IT技术 · 发布时间: 4年前

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

用  <a href='https://www.codercto.com/topics/20577.html'>Docker</a>  构建  <a href='https://www.codercto.com/topics/18746.html'>MySQL</a>  主从环境

前言

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

介绍

用 Docker 构建 MySQL 主从环境

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

  1. master 节点将数据的更新记录写到 binary log 中。
  2. slave 节点开启 IO 线程连接 master 节点并把 master 节点的 binary log 读出来写到自己的 relay log 中。
  3. slave 节点开启 SQL 线程读取 relay log 并解析执行,执行完成后,更新同步的位置标志位。

配置

创建目录结构

首先先搞定目录结构,我的目录结构如下,如果想按照自己的想法来组建目录,在下文中的 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

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

  1. 网易: http://hub-mirror.c.163.com
  2. 阿里云: http://&lt ;你的ID>.mirror.aliyuncs.com
  3. 中国科学技术大学: 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 主从架构所记录的步骤,如果有卡在哪一步,可以留言与我交流。:blush::blush::blush:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

人工智能

人工智能

Stuart J. Russell、Peter Norvig / 清华大学出版社 / 2011-7 / 158.00元

《人工智能:一种现代的方法(第3版)(影印版)》最权威、最经典的人工智能教材,已被全世界100多个国家的1200多所大学用作教材。《人工智能:一种现代的方法(第3版)(影印版)》的最新版全面而系统地介绍了人工智能的理论和实践,阐述了人工智能领域的核心内容,并深入介绍了各个主要的研究方向。全书仍分为八大部分:第一部分“人工智能”,第二部分“问题求解”,第三部分“知识与推理”,第四部分“规划”,第五部......一起来看看 《人工智能》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具