基于mysql 5.7 docker镜像搭建mysql主从复制集群

前言

  • 本文将开始基于mysql 5.7镜像搭建主从复制集群。其实,我发现了,这玩意跟redis的集群搭建一样,都是玩配置文件
  • 说明:
    • mysql 5.7镜像为本人自己基于docker hub官网镜像5.7版本的镜像进行二次构建,主要是添加了中文的支持,即在官方镜像的/etc/mysql/mysql.conf.d/mysqld.cnf文件添加了character-set-server=utf8的配置,拉取镜像命令:
      docker pull registry.cn-hangzhou.aliyuncs.com/avengereug/mysql:5.7
      

一、预准备环境

1.1 操作系统环境准备

1.2 配置文件准备

  • 第一步: 新建如下两个文件夹
    mkdir -p /root/mysql/master
    mkdir -p /root/mysql/slave
    
  • 第二步:分别在上述两个文件夹内创建my.cnf文件
    cd /root/mysql/master && touch my.conf
    cd /root/mysql/slave && touch my.conf
    
  • 第三步:将下列内容分别填充至对应的my.cnf文件内
    • /root/mysql/master/my.cnf
      !includedir /etc/mysql/conf.d/
      !includedir /etc/mysql/mysql.conf.d/
      
      [mysqld]
      server-id=33068
      log-bin=/var/lib/mysql/mysql-bin
      
    • /root/mysql/slave/my.cnf
      !includedir /etc/mysql/conf.d/
      !includedir /etc/mysql/mysql.conf.d/
      
      [mysqld]
      server-id=33069
      relay-log=/var/lib/mysql/relay-bin
      relay-log-index=/var/lib/mysql/relay-bin.index
      
  • 注意:上述的server-id可以任意写,只要不冲突即可

二、搭建主从复制

2.1 拉取mysql 5.7镜像并重命名

  • 执行如下脚本
    docker pull registry.cn-hangzhou.aliyuncs.com/avengereug/mysql:5.7 \
    && \
    docker tag registry.cn-hangzhou.aliyuncs.com/avengereug/mysql:5.7 mysql:5.7
    

2.2 分别启动master和slave节点

  • 启动master节点
    docker run --name mysql-master -it -d -p 33068:3306 \
    -e MYSQL_ROOT_PASSWORD=root \
    -v /root/mysql/master/my.cnf:/etc/mysql/my.cnf \
    -v /mysql/data/master:/var/lib/mysql mysql:5.7
    
  • 启动slave节点
    docker run --name mysql-slave -it -d -p 33069:3306 \
    -e MYSQL_ROOT_PASSWORD=root \
    -v /root/mysql/slave/my.cnf:/etc/mysql/my.cnf \
    -v /mysql/data/slave:/var/lib/mysql mysql:5.7
    
  • 这里有几个注意点

    1.官网的mysql5.7镜像存储的数据在/var/lib/mysql目录下,为了保证镜像删除后数据能保存下来,所以将宿主机的/mysql/data/master挂载到/var/lib/mysql目录下了(slave节点类似)。后续直接按相同的命令启动mysql镜像,数据也不会丢失。
    2.使用了我们之前准备好的配置文件,用来做主从复制集群使用
    3.设置的root用户密码为root
    4.在主从复制集群过程中,master和slave节点的用户名和密码最好保持一致
    5.mysql5.7镜像默认支持远程连接,而且mysql库的user表的root用户的localhost属性默认为%,支持所有的远程ip链接

2.3 关联主从节点

  • 第一步:查看master节点信息, 可以选择远程链接(注意关闭防火墙或开放对应的端口)或者进入docker容器内查看,因为我本机安装过mysql,所以选择cmd命令远程链接,具体执行命令和结果如下图所示:
    在这里插入图片描述

  • 第二步:进入slave节点,关联master节点,具体操作和结果如下图所示:
    在这里插入图片描述

    注意:此时也仅仅是关联上了主节点,并没有从节点复制的功能。其中关联主节点的命令如下:
    sql CHANGE MASTER TO MASTER_HOST='192.168.111.147', MASTER_PORT=33068, MASTER_USER='root', MASTER_PASSWORD='root', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154;

    我们先在从节点中执行如下命令:
    sql SHOW SLAVE STATUS \G;
    部分结果如下:
    在这里插入图片描述
    接下来,我们来开启从节点的复制功能,执行如下命令:

    START SLAVE;
    

    运行结果如下:
    在这里插入图片描述

三、主从复制功能测试

  • 在这里插入图片描述

  • 综上,mysql的主从复制功能已经完成,当然这只是自己瞎玩的,咱们的主节点只有一个,万一挂了怎么办。所以一般如果要采用主从复制的部署方式,通常还会结合Keepalived,以及多个主节点。关于Keepalived的搭建可以参考我的另外一篇博客:Keepalived + nginx负载均衡完成主主架构

四、总结

  • 主从复制的功能是已经实现, 若真要在项目中使用,还要配置多数据源,一个数据源用来读另外一个数据源用来写(可以自己写代码实现或者借用mycat的中间件)。
  • I am a slow walker, but I never walk backwards.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值