美文网首页Docker
基于Docker的Mysql主从复制

基于Docker的Mysql主从复制

作者: 台风口的猪 | 来源:发表于2019-04-02 16:12 被阅读92次

    MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。

    MySQL主从同步的作用

      1、可以作为一种备份机制,相当于热备份
      2、可以用来做读写分离,均衡数据库负载
    

    利用Docker搭建主从服务器

      拉取docker镜像
      docker pull mysql:5.7.13
      Master(主):  
       docker run -p 33066:3306 --name master -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
      Slave(从):
        docker run -p 33067:3306 --name slave1 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.13
    

    docker ps 查看正在运行的容器

    运行中的容器

    使用数据库管理工具连接mysql

    连接docker容器启动的mysql主库.png

    配置Master

    通过docker exec -it 容器id 或者 容器名称 /bin/bash 进入容器

      cd /etc/mysql  输入vim my.cnf 
      如果没有安装vim则安装,否则将提示bash: vim: command not found
      1.apt-get update 
      2.apt-get install vim
      3.vim my.cnf  
      [mysqld]
         #同一局域网内注意要唯一
          server-id=1
         #开启二进制日志功能
          log-bin=mysql-bin
       配置完成后操作如下两步:
           .1 service mysql restart  重启mysql服务使配置生效
           .2 docker start master  重启mysql服务时会使得docker容器停止
    

    在Master数据库创建数据同步用户

      CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
      GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
      授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限
    

    配置Slave

        my.cnf 不一样
         [mysqld]
        # 设置server_id,注意要唯一
        server-id=2
        # 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
        log-bin=mysql-slave-bin   
        # relay_log配置中继日志
        relay_log=edu-mysql-relay-bin  
    
        其他配置与Master步骤相同
    

    连接Master(主)和Slave(从)

      执行 show master status; 
    
    image.png
    在Slave中执行
      CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_USER='slave',           
      MASTER_PASSWORD='root', MASTER_PORT=3306, 
      MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 609, 
      MASTER_CONNECT_RETRY=30;
    

    master_host :Master的地址,指的是容器的独立ip,可以通过
    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
    master_port:Master的端口号,指的是容器的端口号
    master_user:用于数据同步的用户
    master_password:用于同步的用户的密码
    master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
    master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
    master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

    主从配置成功.png

    如果SlaveIORunning一直是Connecting

        1.网络不通
             检查ip,端口
         2.密码不对
             检查是否创建用于同步的用户和用户密码是否正确
        3.Position不对
             检查Master的 Position
    

    开启同步功能

        mysql>start slave;
    

    停止MySQL服务

       stop slave
    

    查看数据库状态

       show slave status
    
    参考链接:

    https://www.cnblogs.com/songwenjie/p/9371422.html
    https://www.cnblogs.com/luckcs/articles/2543607.html
    https://blog.csdn.net/mycwq/article/details/17136001
    https://juejin.im/entry/5aa620f5f265da238440396a

    相关文章

      网友评论

        本文标题:基于Docker的Mysql主从复制

        本文链接:https://www.haomeiwen.com/subject/okywvqtx.html