• Docker环境构建MySQL主从复制


    前置条件:服务器已配置Docker环境

    1.查询mysql镜像

    docker search mysql;
    

     拉取镜像

    docker pull mysql

     2.创建两个mysql容器

    执行命令docker images; 查到到我们拉取的镜像

     执行命令创建主容器mysql-master

    docker run -di --name=mysql-master -p 33308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

     创建从容器mysql-slave

    docker run -di --name=mysql-slave -p 33309:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

     -p 代表端口映射,格式为 宿主机对外暴露的端口:容器运行端口 -e 代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码

    33308与33309端口 是楼主在阿里云机器上对外暴露的端口

    3.修改主容器配置

    执行命令进入到Master容器内部 

    docker exec -it mysql-master /bin/bash

    docker容器是轻量级的嘛,所以有些操作命令是不支持的,我们还需要安装一下

    yum install -y which

     查看mysql安装文件夹

    which mysql

    执行下面的命令查看配置文件my.cnf所在位置

    /usr/bin/mysql --verbose --help|grep -A 1 'Default options'

     /etc/my.cnf是我们的配置文件 执行命令vi /etc/my.cnf (如果报错vi: command not found,执行yum install vi)

    1. #保证唯一性
    2. server-id=1
    3. #开启binlog日志并设置文件名字
    4. log_bin=master-bin

     保存完 重启容器

    1. docker stop mysql-master;
    2. docker start mysql-master;

     4.修改从容器配置

    进入容器

    docker exec -it mysql-slave /bin/bash

    修改配置文件 (假如报错vi: command not found 执行yum install vi)

    vi /etc/my.cnf

    把下面的配置粘贴进去

    1. #保证唯一性
    2. server-id=2
    3. #开启relay日志并设置文件名字
    4. relay_log=slave-relay

     保存 重启容器

    1. docker stop mysql-slave;
    2. docker start mysql-slave;

    5.配置主从关系

    进入主容器

    docker exec -it mysql-master /bin/bash

    然后执行命令 连接到mysql服务

    mysql -uroot -p123456

    执行命令查看master状态

    show master status;

     可以看到binlog文件,还有文件中的索引位置。Binlog_Do_DB和Binlog_Ignore_DB这两个字段是表示需要记录binlog文件的库或者不需要记录binlog文件的库(即不需要同步的数据库)。暂时没有配置,就表示是针对全库记录日志。

    然后在从容器中 连接到mysql服务 执行如下语句

    1. change master to master_host='172.17.0.3',
    2. master_user='root',
    3. master_password='123456',
    4. master_port=33308,
    5. master_log_file='master-bin.000002',
    6. master_log_pos= 154;

    master_host :Master的地址

    master_user master_password:用于同步数据时,用到的主库的用户、密码

    master_log_file:指定 Slave 从哪个日志文件开始复制数据,根据你在主容器执行show master status;查询到什么,就配置什么。

    master_log_pos:从哪个 Position 开始读,都是对应master中的值

     执行完毕后 启动slave就可以了

    start slave;

      

    查看从节点信息

    show slave status \G;

     现在去主库建库、表,写数据,从库都会把数据同步过去了

    参考博文

    https://www.cnblogs.com/nijunyang/p/14990169.html

    https://www.cnblogs.com/NIAN2011/p/16637719.html

  • 相关阅读:
    跑分平台的运作模式、业务流程及风险防控
    当SSC遇见RPA:最大化发挥共享服务模式效用
    常见的网络攻击
    SL9056C 8V~100V 1.5A磁吸灯降压恒流LED驱动芯片
    【FPGA+PWM】基于FPGA的三相PWM整流器移相触发电路的设计与实现
    【CSS技巧系列】解决子容器滚动引发父容器滚动问题
    C/C++之数据结构与算法2:高精度计算-减法
    react面试题
    IDEA快捷键
    池式结构:对象池(Object Pool)
  • 原文地址:https://blog.csdn.net/jack__love/article/details/127655434