MySQL操作系列之基于docker的log-bin模式的主从复制(十四)

本文详细介绍了如何利用Docker容器环境部署MySQL主从复制系统,包括配置my.cnf文件、设置二进制日志、创建复制用户、授权及刷新权限、启动和检查复制状态等关键步骤。

本篇讲解的是基于docker+mysql底层的log日志完成的主从复制(暂没有使用到mycat做)

(一)看log的主从复制原理图

(二)搭建步骤

0.省略docker操作mysql容器等步骤...

1.启动主从两台mysql

启动主机:docker run -p 3307:3306 --name mysql-master -v $PWD/mysql-master/conf:/etc/mysql/conf.d -v $PWD/mysql-master/logs:/logs -v $PWD/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
启动从机:docker run -p 3306:3306 --name mysql-slave -v $PWD/mysql-salve/conf:/etc/mysql/conf.d -v $PWD/mysql-salve/logs:/logs -v $PWD/mysql-salve/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
注:启动容器后,可以使用:docker inspect mysql-master|grep IP 命令查询当前容器的IPAddress,在后面需要使用到

2.进入mysql-master容器中: docker exec -it mysql-master /bin/bash 

  2.1 复制my-default.cnf文件:cp /usr/share/mysql/my-default.cnf /etc/my.cnf
  2.2 编辑my.cnf文件:
      在此文件的#logbin内容下面指定两个语句:
      #指定当前mysql主机的唯一id
      server_id=1
      #指定(打开)当前mysql主机的二进制日志文件(看mysql主从复制原理图)
      log-bin=mysql-bin
  2.3 重新启动mysql服务器 systemctl restart mysql

  
3.进入mysql-slave容器中: docker exec -it mysql-slave /bin/bash 

  3.1 复制my-default.cnf文件:cp /usr/share/mysql/my-default.cnf /etc/my.cnf
  3.2 编辑my.cnf文件:
      在此文件的#logbin内容下面指定一个语句:
      #指定当前mysql主机的唯一id
      server_id=2
      [上面为单向主从复制,如果执行为双向主从复制,就要将与主机中一样,指定二进制日志文件]
  2.3 重新启动mysql服务器 systemctl restart mysql

接下来的4与5步是:打通主从两台机之间的通道,进行二进制文件之间的复制传输数据  

 4 打通主机通道

  4.1 进入mysql-master容器中: docker exec -it mysql-master /bin/bash
  4.2 登录进mysql中:mysql -uroot -p123456
  4.3 创建用于管理传输通道的一个用户:mysql> create user 'repl'@'172.17.0.%' identified by '123456';
      [注:172.17.0.%为上面查询到的IPAddress,%为通配符,此句的意思就是172.17.00.%这个网段下的所有机器都能使用到这个repl用户]
  4.4 赋权限给此用户:mysql> grant replication slave on *.* to 'repl'@'172.17.0.%' identified by '123456';
  4.5 把权限重新刷新下:mysql>flush privileges;
  4.6 mysql>exit
  4.7 在容器中重启mysql
  [注:两种方式重启mysql:
  第一种:由于当前mysql容器的系统是Ubuntu,所以需要使用service mysql restart重启mysql,但这样会自动退出当前容器,所以需要重新创建容器;
  第二种(这种方式较为极端):
  打开一个新的窗口,以mysql-master容器的基础上使用commit构建一个新的镜像,然后再在此新的镜像my-mysql-master,
  并在此镜像上创建新的容器my-mysql-master的基础上操作,同时可以删除原先的mysql-master容器
  ]
  检查是否成功:mysql>show master status;/G


 5 打通从机通道

  5.1 打开一个新的窗口,以mysql-slave容器的基础上使用commit构建一个新的镜像,然后再在此新的镜像my-mysql-slave,
      并在此镜像上创建新的容器my-mysql-slave的基础上操作,同时可以删除原先的mysql-slave容器
  5.2 进入my-mysql-slave容器后,先停止从机通道 mysql>stop slave;  
  5.3 mysql>change master to master_host='172.17.2.4',master_user='repl',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=120;
      [注:master_host的值为主机的IPAddress,master_log_file与master_log_pos就是在主机容器中使用mysql>show master status;/G查出来的结果]
  5.4 重启:mysql>start slave; 
  5.5 mysql>show slave status \G;
  

6.mysql检查创建的用户是否存在;

列:SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'username');
如:SELECT EXISTS(SELECT 1 FROM mysql.user WHERE user = 'repl');


7.增加注意:

mysql的主从复制在高并发的情况下会有错误,因为mysql底层主从复制是采用的单线程来进行二进制流文件的复制,而在多线程的情况下它是无法处理的了的。
也就是数据量大的情况下,一定要将底层单线程模式设置为多线程模式去做主从复制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值