Blogger Information
Blog 11
fans 13
comment 1
visits 17503
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【MySQL】使用docker配置主从复制(主库和从库都是全新的情况)
咔咔
Original
751 people have browsed it

这篇文章只是让大家了解一下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的配置一定要对啊!要不就完犊子了

博主微信欢迎交流

在这里插入图片描述

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments