mysql主从复制原理

MySQL Replication是MySQL的一个非常重要的功能,主要用于主服务器和从服务器之间的数据复制操作。

复制过程

  1. 主服务器数据库启用二进制日志,主服务器上的修改保存至本地二进制日志。

  2. Master接收到来自Slave的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 BinaryLog 中的位置。

  3. Slave的IO线程接收到信息后,将接收到的日志内容依次写入到Slave端的RelayLog文件(mysql-relay-lin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到 master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”。

  4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave端执行了同样的 Query,所以两端的数据是完全一样的。

整体上来说,Replication是一个异步的复制过程,大致有3个步骤:

  • master将改变记录到二进制日志(binary log)中
  • slave将master的binary log events拷贝到它的中继日志(relay log)
  • slave重做中继日志中的事件,将改变反映它自己的数据

复制线程

MySQL使用4个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上)。

  1. 当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送[记录在其binglog中的语句];
  2. 主服务器创建一个线程将二进制日志中的内容发送到从服务器。 该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。
  3. 从服务器I/O线程读取主服务器Binlog Dump线程发送的数据并将其拷贝到从服务器的本地文件中,即中继日志。
  4. 第4个线程是SQL线程,是从服务器创建用于读取中继日志并执行日志中包含的更新。 所以,每个从服务器有3个线程。有多个从库的主服务器将为每个当前连接的从服务器创建一个线程。

复制方案效果比对

单向复制有利于健壮性、速度和系统管理;从库可以分担主库的查询负载和备份压力;

方案一:传统一对一

方案二:链式

  • 优点:极大减少主库的磁盘和网络压力;
  • 缺点:中间一环故障,则导致后面2台数据异常;

方案三:一主多从

  • 优点:任一从库异常不影响其他从库;
  • 缺点:增加主库磁盘和网络压力;

Copyright © www.sqlfans.cn 2024 All Right Reserved更新时间: 2022-09-19 17:04:37

results matching ""

    No results matching ""