• Mysql 主从复制原理---介绍


    思想:

      1.主服务器(master) 接受用户的内容更新,并写入bin-log中
      2.一个或多个从服务器(slave) ,接受来自 主服务器的 binlog 日志文件(I/O 线程), 解析出sql(sql 线程),
      3.重新更新到服务器(slave),完成数据的一致(sql 线程)
     

    主从服务器应用场景:

      1.更好的支持大规模高并发读写
        1.1主服务器实现读写分离, 从服务器实现负载均衡(lvs)
        1.2数据库读写分离架构
      2.更有效的保护物理服务器宕机场景下的数据备份
        2.1从服务器 作为 主服务器的实时数据备份
     

    主从同步的原理:

      1.mysql 的主从复制是一个 异步 的复制过程,(虽然一般情况下感觉是实时的), 数据将从一个 mysql 数据库( 我们称为 master) 复制到另一个 mysql数据库( 我们称之为 slave)

      在 master 与 slave 之间实现整个主从复制的过程是由3个 线程参与完成的

      2.一个线程在 moster端口 ( I/O 线程), 两个线程在 slave端 (一个 sql 线程, 一个i/o线程)

      3.要实现mysql 的主从复制功能,首先必须打开 master 端的 bin-log 记录功能, 否则无法实现, 因为整个复制过程实际上就是 slave 从 master 端获取 binlog 日志,然后在 slave 上以相同的顺序执行获取   binlog 日志中的所记录的各种sql操作。

    1、如何打开 master 的binlog 记录功能

      master 服务器的 mysql 配置文件, my.cnf, 添加信息如下

      [mysqld]

      log-bin = /data/3306/mysql-bin

    mysql Replication 主从复制原理箱体过程描述:

      1.在 slave 服务器上 执行 start slave 命令,开启复制开关,开始进行主从复制


      2.此时, slave 服务器的 I/O 线程会通过 master 上 已经授权的复制用户权限 请求连接 master 服务器, 并请求从指定 binlog 日志文件的指定位置 (日志文件名和位置就是在配置主从复制服务时执行     change master 命令指定的)之后开始发送 binlog 日志内容,


      3.master 服务器接收到来自 slave 服务器的 I/O 线程的请求后, master 上负责复制的 I/O 线程会根据 slave 服务器的 I/O 线程请求的信息分批读取指定 binlog 日志文件指定位置之后的 binlog 日志信息,   然后返回给 slave 端的 I/O 线程。
      返回的信息有:
        3.1.binlog 日志信息
        3.2.master 服务器记录的新的 binlog 文件名称,以及在新的 binlog 中的下一个指定更新位置


      4.当 slave 服务器的 i/o 线程 获取到 master 服务器上的 I/0 线程发送的日志内容(日志文件 和 日志位置点)后,
        4.1. 会将 binlog 日志内容 依次 写到 slave 端 自身的 relay log (中继日志)文件的最末端,格式: mysql-relay-bin.xxxx,
        4.2.将新的 bin-log 文件名 和文件位置 记录到 master-info 文件中, 以便一下次读取master 端 bin-log 日志时能够告诉 master 服务器 从新 bin-log 日志指定的文件和位置开始请求新的 bin-log 日志内                  容


      5.slave 服务器的 sql线程 会实时的检测本地的 relay log 中 I/O线程 新增加的日志内容,
        5.1然后及时的把 relay log 文件中的内容解析成 sql 语句,
        5.2并在 relay-log.info 中记录当前应用中继日志的文件名和位置点


      6.经历了上面的过程, 就可以保证 master 端 和 slave 端执行了相同的 sql 语句,当复制状态正常时, master 和 slave 端的数据是完全一样的
     

    针对mysql 主从复制原理的重点进行小结:

      1.主从复制是异步的逻辑的 sql语句级别的复制
      2.复制时,主库有一个 I/O 线程, 从库有2个线程,即 i/o 和 sql 线程
      3.实现主从复制的必要条件是: 主库开启 binlog 功能
      4.作为复制的所有 mysql 节点的 server-id 都不能相同
      5.bin-log 只记录对数据可以有更改的 sql 语句(来自数据库内容的变更), 不记录任何查询(select 、show) 语句

  • 相关阅读:
    简单实现vue列表点击某个高亮显示
    vue中子组件直接修改父组件prop属性bug
    Java基础——关于接口和抽象类的几道练习题
    Eclipse中导入外部jar包步骤
    Java基础——关于jar包的知识
    Java基础——关于访问权限的一道例题
    Java基础——抽象类和接口
    Java基础——多态
    Java基础——继承
    三个案例,解读静态代码块和构造代码块
  • 原文地址:https://www.cnblogs.com/DJRemix/p/11418151.html
Copyright © 2020-2023  润新知