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) 语句

转载于:https://www.cnblogs.com/DJRemix/p/11418151.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值