zoukankan      html  css  js  c++  java
  • 用 Docker 构建 MySQL 主从环境

      开源Linux

    一个执着于技术的公众号

    前言

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

    介绍

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

    1.master 节点将数据的更新记录写到 binary log 中。2.slave 节点开启 IO 线程连接 master 节点,请求获取指定 binary log 文件的指定位置之后的日志。3.master 节点的 binary log dump 线程将指定的 binary log 信息推送给 slave 节点。4.slave 节点的 IO 线程接收到消息后,将日志内容写入 relay log 文件。5.slave 节点的 SQL 线程检测到 relay log 新增了内容,马上解析 relay log 文件生成相应的 SQL 语句,并将这些 SQL 语句重放到数据库,保证主从数据一致性。

    配置

    创建目录结构

    首先先搞定目录结构,我的目录结构如下,如果想按照自己的想法来组建目录,在下文中的 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
    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
    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...•中国科学技术大学: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;命令,查看是否成功同步,出现如下情形则配置成功。其他操作可以自己尝试,这里不再做演示。

    来源:

    https://segmentfault.com/a/1190000023336513

    - End -

    关注「开源Linux」加星标,提升IT技能

    好文章,分享点赞在看三连哦❤️↓↓↓

    十年磨一剑
  • 相关阅读:
    关于动态规划的问题494_LEETCODE_TARGET_SUM
    Python 关于二叉树生成、先序遍历、中序遍历、后序遍历、反转
    关于python引入文件路径的解决办法
    git一些笔记
    迪克斯特拉 算法(算最短距离)
    Python多线程编程中daemon属性的作用
    types.MethodType实例绑定方法
    Python之__getitem__、__getattr__、__setitem__ 、__setitem__ 的区别
    jenkins自动打包ios、安卓
    python socket编程tcp/udp俩连接
  • 原文地址:https://www.cnblogs.com/qinlulu/p/14671552.html
Copyright © 2011-2022 走看看