MST

星途 面试题库

面试题:MySQL高可用性之主从复制相关

在MySQL主从复制架构中,简述从库是如何获取主库数据变化并应用的?如果主库出现网络故障,从库在故障恢复后如何保持数据一致性?
41.6万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

从库获取主库数据变化并应用的过程

  1. 连接主库:从库通过配置的主库连接信息(如主库IP、端口、用户名、密码等),使用 CHANGE MASTER TO 语句来建立与主库的连接。
  2. 请求二进制日志:从库向主库发送请求,获取主库二进制日志(Binary Log)的位置和文件名。主库记录数据库的所有更改操作到二进制日志中。
  3. 复制日志:主库将二进制日志内容以事件(Event)的形式发送给从库。这些事件包括数据的插入、更新、删除等操作。
  4. 中继日志:从库接收到主库发送的二进制日志事件后,将其写入到本地的中继日志(Relay Log)中。
  5. 应用中继日志:从库启动一个SQL线程,读取中继日志中的事件,并按照事件的顺序在从库的数据库上重新执行这些操作,从而使从库的数据与主库保持一致。

主库出现网络故障后从库保持数据一致性的方法

  1. 自动重连:从库在检测到与主库的网络连接中断后,会根据配置的重试机制自动尝试重新连接主库。通常可以通过 master_retry_count 等参数来设置重试次数和间隔时间。
  2. 记录位置:在网络故障发生前,从库会记录自己在主库二进制日志中的读取位置(通常包括文件名和偏移量)。当重新连接成功后,从库会告知主库上次中断时的位置,主库从该位置开始继续发送后续的二进制日志事件。
  3. 跳过错误:如果在重新应用中继日志或重新获取主库日志过程中遇到一些可忽略的错误(例如,某些临时的锁冲突等),可以通过设置 slave_skip_errors 参数让从库跳过这些错误继续复制,以尽量保持数据一致性。但需谨慎使用,因为可能会导致数据不一致的隐患。
  4. 手动处理:若自动重连和常规机制无法解决问题,DBA 可以手动介入。比如检查主从库的日志状态,使用 SHOW MASTER STATUSSHOW SLAVE STATUS 等命令查看日志位置、复制状态等信息。必要时,可以通过重新配置主从复制关系,重新指定主库日志位置等操作来恢复数据一致性。