面试题答案
一键面试relay - log在MariaDB复制中的角色
- 数据中转存储:relay - log(中继日志)在MariaDB复制架构中充当从库接收主库二进制日志(bin - log)事件的临时存储地。从库通过I/O线程从主库读取二进制日志事件,并将这些事件写入relay - log中。这使得即使在主从连接短暂中断等情况下,从库也不会丢失主库发送过来的更新信息,保证了数据的连续性和完整性。
- 解耦I/O与SQL应用:它将从主库接收日志事件(I/O操作)和在从库上应用这些事件(SQL操作)的过程分离开来。I/O线程专注于快速地从主库获取日志并写入relay - log,而SQL线程则从relay - log中读取日志事件并在从库上按顺序执行,这样可以提高复制的效率和稳定性。
relay - log的工作流程
- I/O线程读取:
- 从库的I/O线程建立与主库的连接,向主库请求二进制日志事件。
- 主库的二进制日志转储线程开始向从库I/O线程发送二进制日志事件。
- I/O线程接收这些事件,并将它们写入relay - log文件中。每个relay - log文件都有一个编号,如
relay - log.000001
,relay - log.000002
等,当一个文件写满时会自动切换到下一个文件。 - I/O线程还会记录中继日志索引文件(
relay - log.index
),该文件记录了当前使用的所有relay - log文件的路径和文件名,便于SQL线程定位和读取。
- SQL线程应用:
- 从库的SQL线程监控relay - log,当检测到有新的日志事件写入relay - log后,SQL线程从relay - log中按顺序读取日志事件。
- SQL线程根据读取到的日志事件,在从库上执行相应的SQL语句,从而使从库的数据状态与主库保持一致。
- SQL线程在应用完relay - log中的一部分或全部事件后,会更新从库的复制位点信息(通过
relay - master - info
文件记录主库的二进制日志文件名和位置,以及从库当前读取和应用到的位置),以便在发生故障恢复时能够准确地继续复制。