• MySQL 实践篇 —— 主从复制


    MySQL 实践篇 —— 主从复制


    1、概述

    ​  主从复制 就是 把 主服务器(Master)上的 二进制日志文件(binlog,记录了所有修改数据库的操作)复制到 从服务器(Slave)上执行一遍,保证 从服务器 上的数据 和 主服务器 上的数据 保持一致。

    ​  工作过程:

    • 主服务器 把数据更改 记录到 二进制日志文件 中
    • 从服务器 开启一个 I/O 线程 通过 MySQL 协议 把 主服务器 的 二进制日志文件 复制到自己的 中继日志文件(relay log)中
    • 从服务器 开启一个 SQL 线程 执行 中继日志文件 中的内容

    补充:I/O 线程 和 SQL 线程

    • I/O 线程:负责读取 主服务器的二进制日志文件,并将其保存为 中继日志文件
    • SQL 线程:执行 中继日志文件 中的内容

    在这里插入图片描述



    2、实践

    1、在 E 盘 建立 master 和 slave 目录

    2、找到本机的 MySQL 安装路径 将 整体文件夹 压缩打包

    3、将 压缩包 分别拷贝到 master 和 slave 目录下,并完成解压

    4、配置 MySQL 的系统文件 my.ini

    • master 的 my.ini 配置

      ​ 用 记事本(或其它编辑器)打开 master 根目录 下的 my.ini,在 [mysqld] 下 新增 log-bin=mysql-bin server-id=3306 并 保存关闭。

      [mysqld]
      log-bin=mysql-bin	# 表示要生成的二进制日志文件名称
      server-id=3306
      
      • 1
      • 2
      • 3
    • slave 的 my.ini 配置

      ​ 用 记事本(或其它编辑器)打开 slave 根目录 下的 my.ini,将 [client] 下 的 port(端口号)从 3306 改成 3307;将 [mysqld] 下 的 port 从 3306 改成 3307,新增 log-bin=mysql-bin server-id=3307 并 保存关闭。

      [mysqld]
      log-bin=mysql-bin
      server-id=3307
      
      port=3307
      
      [client]
      port=3307
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    5、启动 master 服务器,并创建一个专门用于复制的账户

    • 打开命令窗口 cmd,进入 master 的 bin 目录,输入启动服务器的命令:mysqld --console,启动服务器

    • 打开命令窗口 cmd,进入 master 的 bin 目录,输入 mysql -u root -p,登录到 master 服务器

    • 创建 复制账号,用户名 repuser,密码 123

      mysql>Create user 'repuser'@'localhost' identified by '123';
      mysql>grant replication slave on *.* to 'repuser'@'localhost';
      mysql>flush privileges;
      mysql>show master status \G 	# 显示 master 状态; \G 以行进行显示,后面不用加';'
      
      • 1
      • 2
      • 3
      • 4

    在这里插入图片描述

    在这里插入图片描述

    6、启动 slave 服务器,完成 slave 的配置

    • 打开命令窗口 cmd,进入 slave 的 bin 目录, 输入启动服务器的命令:mysqld --console, 启动服务器

    • 打开命令窗口 cmd,进入 slave 的 bin 目录,输入 mysql -u root -p 登录到 slave 服务器

    • 完成 主从复制 的相关配置

      mysql>change master to master_host='localhost',master_port=3306,master='repuser',master_password='123',master_log_file='mysql-bin.000001',mastet_log_pos=0;
      
      • 1
    • 启动 slave 并 检查其状态

      mysql>start slave;
      mysql>show slave status \G
      
      • 1
      • 2

    在这里插入图片描述

    在这里插入图片描述

    注:检查 Slave_IO_Running 线程 和 Slave_SQL_Running 线程 是否都为 yes,如果是,表示 主从复制服务 已建立;如果否,表示 主从复制服务 未建立。

    7、主从复制测试

    (1)在 master 客户端,创建一个数据库 BankDB,创建成功后,在 slave 客户端 查看有没有出现 BankDB:show databases;

    DROP SCHEMA IF EXISTS BankDB ;
    CREATE SCHEMA IF NOT EXISTS BankDB default character set gbk;
    USE BankDB;
    
    Create table Bank(BankID int, Cname char(20), Balance decimal(10,2));
    insert into Bank values (20181211,'张三', 20000);
    insert into Bank values (20181212,'李四', 10000);
    insert into Bank values (20181213,'王五', 20000);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    master 客户端:

    在这里插入图片描述

    slave 客户端:

    在这里插入图片描述

    (2)在 master 客户端,修改 Bank 表的数据, 在 slave 客户端 查看是否更新成功

    update Bank set Balance=Balance + 99;
    
    • 1

    master 客户端:

    在这里插入图片描述

    slaver 客户端:

    在这里插入图片描述

    (3)在 slave 关闭状态下(slave 客户端:stop slave,slave 服务端:Ctrl+C), 在 master 客户端 新建一个数据库 BankDB1;重新启动 slave,在 slave 客户端 查看有没有出现新建的数据库 BankDB1

    DROP SCHEMA IF EXISTS BankDB1;
    CREATE SCHEMA IF NOT EXISTS BankDB1 default character set gbk;
    USE BankDB1;
    
    Create table Bank(BankID int, Cname char(20), Balance decimal(10,2));
    insert into Bank values (20181211,'张三', 20000);
    insert into Bank values (20181212,'李四', 10000);
    insert into Bank values (20181213,'王五', 20000);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    master 客户端:

    在这里插入图片描述

    slaver 客户端:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    分布式领域最重要的一篇论文,到底讲了什么?
    HSF概述
    Python中 utf-8和gbk以及unicode编码
    Java中使用redis的bitMap实现签到功能
    UG\NX二次开发 判断特征是否被抑制 UF_MODL_ask_suppress_feature
    2023 最新 Git 分布式版本控制系统介绍和下载安装使用教程
    shell脚本 正则表达式
    Allegro给各种形式的板框导弧操作指导
    编程随笔-Java | 02.File类常用API
    uniapp 跳转页面保存和刷新 拦截器的使用
  • 原文地址:https://blog.csdn.net/weixin_51123079/article/details/126020229