首页 > 数据库 >MySQL 主从同步的基本原理

MySQL 主从同步的基本原理

时间:2024-10-11 10:00:20浏览次数:9  
标签:主库 binlog 基本原理 SQL 线程 MySQL 日志 从库 主从

1、简介

  • MySQL 主从同步主要通过 二进制日志(binlog) 来实现。以下是主从同步的工作流程
1、主库记录 binlog:当主库执行数据更新操作(如 INSERT、UPDATE、DELETE)时,会将这些数据变更写入 二进制日志(binlog) 中。这个日志文件记录了所有影响数据的 SQL 操作。
2、从库请求 binlog:从库通过一个 I/O 线程 向主库请求其 binlog 文件。主库将这些 binlog 文件发送给从库。
3、从库接收 binlog 并存储到 relay log:从库的 I/O 线程将从主库接收到的 binlog 数据存储在本地的 中继日志(relay log) 中。
4、从库应用 relay log:从库的 SQL 线程,它会读取中继日志中的内容,并执行相应的 SQL 操作,从而将主库的数据变更应用到从库中,保持数据同步。

这种流程的核心是 MySQL binlog 日志的复制与重放。

2、详解

  • 主从同步的详细流程
1、主库开启 binlog 日志:
- 当主库执行更新操作(如增删改),这些操作首先会被记录到 binlog 日志文件中。
2、从库启动复制进程
- 在从库上,使用change master to命令配置主库的连接信息,并执行start slave启动从库的复制进程
- 从库开启两个线程:一个I/O线程和一个SQL线程
	- I/O线程负责从主库上请求并接受binlog文件,并写入relay log文件中
	- SQL线程负责解析relay log文件中的内容为sql语句,并逐条执行sql语句
3、I/O线程请求biglog
- 从库的I/O线程会通过网络连接主库,发送一个binlog dump请求。这个请求告诉主库“从某个具体的binglog文件及位置(如binlog文件名及位置)开始,发送binlog内容给我”
- 主库收到请求后,从相应的biglog文件的指定位置开始,逐条日志数据发送给从库的I/O线程
4、从库I/O线程写入relay log
- 从库的IO线程将主库发送过来的binlog数据保存到本地的中继日志(relay log)中
5、SQL线程执行中继日志
- 从库的SQL线程不断读取中继日志中的内容,将其当做普通SQL语句执行,应用在从库数据库中
- 当SQL线程执行完所有的relay log后,从库的数据状态就与主库保持一致

3、主从同步的类型

3.1、异步复制:

	默认情况下,MySQL使用异步复制,既主库在执行事务时不会等待从库确认收到binlog并应用该日志。只要主库完成操作,会立即返回给客户端。这种模式下,如果主库发生崩溃,可能会导致部分事务没有传输到从库

3.2、半同步复制

	MySQL5.5引入了半同步复制。在这种模式下,主库在提交事务时,至少会等到一个从库确认收到该事物的binlog日志后才会返回给客户端。因此,它比异步复制提供了更高的数据安全性,但也可能影响主库的性能

3.3、延迟复制

	从库可以设置一个固定的延迟时间来应用relay log中的更改,这成为延迟复制。这种的好处是:当发现主库上的错误操作后,可以通过延迟的从库找回来未被错误操作影响的数据

4、MySQL主从复制的优点

4.1、高可用性

	从库可以用作主库的备份,在主库发生故障时,可以迅速将从库提升为主库,保证业务的连续性

标签:主库,binlog,基本原理,SQL,线程,MySQL,日志,从库,主从
From: https://www.cnblogs.com/suyj/p/18456617

相关文章