zoukankan      html  css  js  c++  java
  • docker mysql5.7主从复制搭建(一主一从)

    一、为什么基于docker搭建?

    • 资源有限
    • 虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐
    • 一台机器上可以运行多个Docker容器
    • docker容器之间相互独立,有独立ip,互不冲突
    • docker使用步骤简便,启动容器在秒级别

    二、docker搭建实操

         1、拉取docker mysql:5.7的镜像

    docker pull mysql:5.7

         2、查看镜像

    docker images
    

      3、启动容器与查看(这里我用3339和3340端口分别主从)

    docker run -itd --name=mysql-5.7-master -p 3339:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7 
    docker run -itd --name=mysql-5.7-slave -p 3340:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

        4、容器安装vim

            

    依次执行
    apt-get update apt-get install vim

        5、主从搭建配置

          1) 配置master服务器:

    docker exec -it mysql-5.7-master /bin/bash
    vim /etc/mysql/my.cnf 加入以下配置 
    [mysqld]
    ## 同一局域网内注意要唯一
    server-id=100
    ## 开启二进制日志功能
    log-bin=mysql-bin

                  service mysql restart重启数据库,使配置生效并重新启动容器:docker start mysql-5.7-master

    再进入master:
        创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

          2) 配置slave服务器:

    docker exec -it mysql-5.7-slave /bin/bash
    vim /etc/mysql/my.cnf
    [mysqld]
    ## 设置server_id,注意要唯一
    server-id=101  
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=mysql-slave-bin   
    ## relay_log配置中继日志
    relay_log=edu-mysql-relay-bin  
    #复制的数据写入日志中
    log_slave_updates=1

              service mysql restart重启数据库,使配置生效,并重新启动容器:docker start mysql-5.7-slave

       3) 连接Master和Slave

             master: 进入master容器

    mysql -uroot -p123456
    show master status;

             slave:进入slave    

    change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=0;
    开始复制:start slave
    查看:show slave status G;

     Slave 中的mysql终端执行:show slave status G;用于查看主从同步状态。

    正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status G;

    如果错误出现1:

    切换主库,show master status;

    从库切换master_log_pos= 主库上面Position的值改为0;

    change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=0;
    然后:
    start slave show slave status G;

     如果错误出现2:

      Slave_IO_Running: Connecting
      Slave_SQL_Running: Yes

    Last_IO_Errno: 2003
    Last_IO_Error: error connecting to master 'slave@172.17.0.2:3306' - retry-time: 60  retries: 1

     宿主机查看master容器的ipaddress是否正确: 

     docker inspect mysql-5.7-master
    

      

     master:(master_log_file和master_log_pos的值根据mysql-5.7-master 进入mysql执行show master status参考)

    change master to master_host='172.17.0.3', master_user='slave', master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=154;
    

      

       4) 验证主从:

                  

          

    关闭防火墙方法:service iptables stop或者systemctl stop firewalld

  • 相关阅读:
    896. Monotonic Array单调数组
    865. Smallest Subtree with all the Deepest Nodes 有最深节点的最小子树
    489. Robot Room Cleaner扫地机器人
    JavaFX
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
    《Python CookBook2》 第一章 文本
  • 原文地址:https://www.cnblogs.com/godpo/p/13195038.html
Copyright © 2011-2022 走看看