zoukankan      html  css  js  c++  java
  • docker 容器的mysql主从复制

    一.

    1.首先拉取docker镜像,我们这里使用5.7版本的mysql:

      docker pull mysql:5.7

    2.分别启动主从两个容器:

         docker run -p 3339:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7(从)

        docker run -p 3339:3306 --name mysqli -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7(主)

    3.

    此时可以使用Navicat等工具测试连接mysql

    Docker容器

      一 .配置主容器(mysqli):

           ① 通过docker exec -it 627a2368c865 /bin/bash命令进入到Master容器内部

           ②    cd /etc/mysql切换到/etc/mysql目录下,然后vi my.cnf对my.cnf进行编辑。此时会报出bash: vi: command not found,需要我们在docker容器内部自行安装vim。使     用  , apt-get install vim命令安装vim

        ③ 会出现以下问题:

     

     Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package vim

              解决方式:执行apt-get update,然后再次执行apt-get install vim即可成功安装vim

    ④ 使用vim编辑my.cnf,在my.cnf中添加:

         

      [mysqld]
    
    ## 同一局域网内注意要唯一
    
            server-id=100
    
    ## 开启二进制日志功能,可以随便取(关键)
    
            log-bin=mysql-bin

    ⑤.使用service mysql restart完成重启

         需要docker start mysql-master启动容器

    ⑥  

    下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。

    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

    二.配置从数据库:

        ①  在my.cnf中添加相同配置(注意server-id改为101)

     

    [mysqld]
    
     
    
    ## 同一局域网内注意要唯一
    
     
    
            server-id=101
    
     
    
    ## 开启二进制日志功能,可以随便取(关键)
    
     
    
            log-bin=mysql-bin

    ②   重启mysql服务和docker容器,操作和配置Master(主)一致

    ③   在mysqli(主容器)进入mysql,执行show master status

    ④   通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

    ⑤ 在mymysql(从容器)中进入 mysql,执行

    //用户名 密码与 一(6中密码一致)

    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= 2830, master_connect_retry=30;

       可能报错

     解决方式:停止从服务器

    ⑥ show slave status G;

    使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status G;

    ⑦ 

          报错原因

    1. 网络不通

      检查ip,端口

    2. 密码不对

      检查是否创建用于同步的用户和用户密码是否正确

    3. pos不对

      检查Master的 Position

    ⑧ 使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status G;

    三. 在主服务器创建数据库,检查是否成功

     

     从

  • 相关阅读:
    声明方法java实际开发中泛型使用需要注意的一些问题
    动态代理代理静态代理与动态代理
    方法返回在android手机开机后,在工程模式下的短信自注册开关默认开启
    打开关闭android如何默认打开小区广播?
    nullnullandroid Bound Services 绑定服务
    nullnullAndroid Interface Definition Language (AIDL) 接口描述语言
    nullnullContent Provider Basics 内容提供者的基本操作
    工程文件辉哥opencv学习之路【三】——opencv运行别人程序
    程序输入幸运数
    批处理相对路径51CTO自动领豆(Python)
  • 原文地址:https://www.cnblogs.com/chaihtml/p/10712470.html
Copyright © 2011-2022 走看看