基于Docker的Mysql主从复制

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主从复制)