zoukankan      html  css  js  c++  java
  • 基于Docker的Mysql主从复制搭建(线下/线上)

     

    利用Docker搭建主从服务器

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

    docker pull mysql:5.7

    然后使用此镜像启动容器,这里需要分别启动主从两个容器

    Master(主):

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

    Slave(从):

    docker run -p 3340:3306 --name mymysql1 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

    使用docker ps命令查看正在运行的容器:

    此时可以使用Navicat等工具测试连接mysql创建两个以上端口的连接

    配置mymysql(主)

    通过docker exec -it 容器id /bin/bash命令进入到mymysql容器内部,也可以通过docker exec -it 容器名称 /bin/bash命令进入。

    cd /etc/mysql切换到/etc/mysql目录下,然后vim my.cnf 或者 vi my.cnf  如果没有vi或者vim

    apt-get update

    apt-get install vim 命令安装vim

    进入my.cnf

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

    配置完成之后,需要重启mysql服务使配置生效。使用service mysql restart完成重启。

    重启mysql服务时会使得docker容器停止,我们还需要docker start 容器id 启动容器。

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

    CREATE USER 'mymysql1'@'%' IDENTIFIED BY '123456';

    只要出现这个表示成功然后运行下一个

    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'mymysql1'@'%';

    配置mymysql1(从)

    和配置mymysql(主)一样,在mymysql1配置文件my.cnf中添加如下配置:

    [mysqld]

    ## 设置server_id,注意要唯一

    server-id=101

    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用

    log-bin=mysql-mymysql-bin

    ## relay_log配置中继日志

    relay_log=edu-mysql-relay-bin

    配置完成后也需要重启mysql服务和docker容器

    链接mymysql(主)和mymysql1(从)

    在mymysql1(从)进入mysql,mysql -u root -p    密码:123456   执行show master status;

    在mymysql1中进入MySQL 执行

    change master to

    master_host='172.17.0.2',(主容器ip    用docker inspect 容器ID查看)

    master_user='mymysql1',

    master_log_file='mysql-bin.000001',(主File的值)

    master_log_pos=1070,(主Position的值)

    master_port=3306,

    master_password='123456';

     

    start slave;

    然后执行show slave status G;查看

    这两个都是yes表示成功

    在主连接中创建库在从连接中就可以看见

    3.3 如在配置主从同步前master中已有数据,则需提前进行数据同步操作

    登录master,执行锁表操作

    mysql -u root -p1234 -h 127.0.0.1 -P 3307
    FLUSH TABLES WITH READ LOCK;
    

    将master中需要同步的db的数据dump出来

    mysqldump -u root -p -h 127.0.0.1 -P 3307  mytest > mytest.dump 
    

    将数据导入slave

    mysql -u root -p -h 127.0.0.1 -P 3308 mytest < mytest.dump
    

    按前文所述步骤开启主从同步,然后解锁master

    UNLOCK TABLES;


    作者:yangziwen
    链接:https://www.jianshu.com/p/f1c56fa3b20d
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

     

  • 相关阅读:
    PHP数组函数
    sublime常用快捷键
    PHP中array_merge函数与array+array的区别
    【转】2017PHP程序员的进阶之路
    phpmyadmin上传sql文件大小限制问题解决方案
    二. python的os模块
    一. python的collections模块
    一. python进阶(文件的读写编码)
    七. python进阶(内置函数和高阶函数)
    六. python进阶(递归)
  • 原文地址:https://www.cnblogs.com/gwhm/p/10900246.html
Copyright © 2011-2022 走看看