当前位置:科技动态 > MySQL高可用(一)主从同步:MySQL如何保证主从数据的一致性?

MySQL高可用(一)主从同步:MySQL如何保证主从数据的一致性?

  • 发布:2023-10-07 05:04

主从同步,也称为主从复制,是MySQL提供的一种高可用解决方案,用于保证主从数据的一致性。解决方案。

在生产环境中,会出现很多不可控的因素,比如数据库服务挂掉了。为了保证应用的高可用,数据库也必须高可用。

因此,在生产环境中,会采用主从同步的方式。当应用规模较小时,一般采用一主一备的方式。

除了上面提到的数据库服务挂了可以快速切换到备库避免应用不可用之外,使用主备同步还有以下好处:

提高数据库的读取并发度。大多数应用程序的读取多于写入。他们采用主从同步方案。当使用规模增大时,可以扩展从库以提高读取能力。

备份,主备同步可以获得实时完整的备份数据库。

快速恢复,当主库出错时(比如误删表),可以通过备库快速恢复数据。对于数据恢复速度容忍度很低的大型应用,通过配置一个与主库数据快照相隔半小时的备库,当主库误删表时,备库和binlog可以用来恢复数据。为了快速恢复,请等待半小时。

讲完了什么是主备同步以及它的好处,我们再来看看主备同步是如何实现的。

主备同步实现原理

我们先了解一下主备同步的原理。接下来我们通过一条update语句来介绍一下主备库是如何同步的。

上图是在节点A上执行更新语句,然后同步到节点B的完整流程图。具体步骤为:

  1. 主库接收客户端发送的更新语句,执行内部事务逻辑,同时写入binlog。
  2. 备库使用change master命令设置主库的IP、端口、用户名和密码,以及开始请求binlog的位置。该位置包含文件名和偏移量。
  3. 在备库上执行start Slave命令,启动两个线程io_thread和sql_thread,其中io_thread负责连接主机。
  4. 主库验证用户名和密码后,根据接收到的位置读取binlog并发送给备库。
  5. 备库收到binlog后,将其写入本地文件(中继日志、中转文件)。
  6. 备份库读取传输文件,解析出命令,然后执行。

主从同步的工作原理其实就是全量备份加二进制日志备份的恢复。不同的是,这个二进制日志的恢复操作基本上是实时的。

备库通过两个线程实现同步:

  • 一个是I/O线程,负责读取主库的二进制日志并保存为中继日志。
  • 一个是SQL线程,负责执行中继日志。

从上面的流程可以看出,主备同步的关键是binlog。 binlog的相关内容在之前的文章中也有介绍过。感兴趣的朋友可以点击查看。

两种常见的主备倒换流程

M-S结构

M-S结构,两个节点,一为主库,一备库,两个节点不允许交换角色。

状态1下,客户端直接访问节点A进行读写,节点B是A的备库。它只同步A的更新并在本地执行。这使得节点 B 和 A 的数据保持相同。

需要切换时,切换到状态2。此时客户端对节点B进行读写,节点A为B的备库。

双M结构

双M结构,两个节点,一主一备,两个节点可以互换角色。

undefined

相关文章