博客列表 >【MySQL】使用docker配置主从复制(主库和从库都是全新的情况)

【MySQL】使用docker配置主从复制(主库和从库都是全新的情况)

咔咔
咔咔原创
2020年04月08日 16:02:16750浏览

这篇文章只是让大家了解一下mysql的主从复制,并且实现了一个案例
但是这个案例不是典型的案例
后面会在写其他的配置方法

主从复制解决的问题

  • 数据分布
  • 负载均衡
  • 备份
  • 高可用和故障切换

在这个案例中,我们只实现了备份 。其他几个点,我们后边一个一个实现,就不写概念了

主从复制是如何工作的

这里写的只是简单的实现过程,具体细节是很麻烦的,建议大家都去了解了解

  • 主库会把数据的更改记录在一个二进制文件
  • 从库会把主库的二进制文件复制到复制到自己的中继日志上(MySQL的日志类型有6中,不清楚的可以看看这篇文章【MySQL】日志分类
  • 从库读取中继日志的时间,然后重新放到备库的数据库上

    开始准备

    这是使用docker安装MySQL的流程
    这里我们假定大部分配置采用默认值即可,在主库和备库都是全新
    安装并且拥有同样的数据时这样的假设是合理的。接下来我们将展示如何一步步配置复制:假设有服务
    器server1(IP地址172.10.0.2)和服务器server2(IP地址172.10.0.3)

【Docker】安装MySQL8.0

在使用docker把MySQL8.0的主节点安装好后在创建俩个MySQL的从节点

分别执行下面语句,这俩个语句分别是创建mysql_slave 和 mysql_slave1的容器

  1. docker run -itd --name mysql-slave -p 3307:3306 --net mynetwork --ip 172.10.0.3 -e MYSQL_ROOT_PASSWORD=123456 mysql
  2. docker run -itd --name mysql-slave1 -p 3308:3306 --net mynetwork --ip 172.10.0.4 -e MYSQL_ROOT_PASSWORD=123456 mysql

在这里插入图片描述

可以看到我们现在创建了三个MySQL的容器

  • 第一个是mysql-master
  • 第二个是mysql-slave
  • 第三个是mysql-slave1

然后三台节点都进入到各自的容器里
docker exec -it id /bin/bash

开始配置主从复制

创建账号

  1. # 创建一个账号
  2. CREATE USER 'master'@'172.10.0.%' IDENTIFIED WITH mysql_native_password BY '123456';
  3. # 给予复制权限
  4. GRANT REPLICATION SLAVE ON *.* TO 'master'@'172.10.0.%';

修改主节点和从节点的配置文件在/etc.mysql/my.cnf
添加
server-id=1
这个server_id 主机跟从机的值坚决不可以一样 一般这个值是根据ip地址的后几位来确定

在这里插入图片描述

授权给从节点

  1. CHANGE MASTER TO
  2. MASTER_HOST='172.10.0.2',
  3. MASTER_USER='master',
  4. MASTER_PASSWORD='123456',
  5. MASTER_LOG_FILE='binlog.000002',
  6. MASTER_LOG_POS=0;

然后查看主从同步状态
Slave_IO_State、Slave_IO_Running和Slave_SQL_Running这三列
显示当前备库复制尚未运行。

在这里插入图片描述

开启主从复制

  1. # 开启主从同步
  2. start slave
  3. # 停止主从复制
  4. stop slave

然后在查看一下主从同步状态
在这里插入图片描述

最后一步开始测试主从复制

先给master创建一个数据库 kaka_test_master_slave

  1. create datebase kaka_test_master_slave;

在这里插入图片描述

然后查看mysql_slave的数据库看有没有创建出来kaka_test_master_slave这个数据库

在这里插入图片描述

测试添加数据

创建表和添加测试数据

  1. CREATE TABLE IF NOT EXISTS `phone` (
  2. `phoneid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `card` INT(10) UNSIGNED NOT NULL,
  4. PRIMARY KEY (phoneid)
  5. );
  6. INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
  7. INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
  8. INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
  9. INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
  10. INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); I
  11. INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));

在这里插入图片描述
在这里插入图片描述

查看mysql_slave的数据状态
数据一切正常

在这里插入图片描述

总结:

  • 在这个案例中
  • 我们只配置了一个master_slave 从机
  • master_slave1这个从机没有配置
  • 配置跟master_slave是一致的
  • 在配置过程中我们需要注意几个问题
  • 第一个:给主机创建用户和给予权限时版本不同是有区别的
  • 第二个:在从机的my.cnf里边配置的server_id没有生效问题(咔咔暂时是用set global方式来做的,但是数据库重启就会失效),这个问题在这篇文章写完解决
  • 第三个:对docker的配置一定要对啊!要不就完犊子了

博主微信欢迎交流

在这里插入图片描述

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议