面试题答案
一键面试核心机制
- 二进制日志(Binary Log):主库将所有影响数据的写操作记录到二进制日志中。这是数据传输的源头,记录了数据库状态改变的一系列事件。
- 主库的日志发送线程(Dump Thread):当从库连接到主库请求复制时,主库会开启一个日志发送线程。该线程读取二进制日志,并将其发送给从库。
- 从库的I/O线程:从库的I/O线程负责与主库的日志发送线程建立连接,接收主库发送的二进制日志内容,并将其写入到从库的中继日志(Relay Log)中。
- 从库的SQL线程:从库的SQL线程读取中继日志中的事件,并在从库上按照顺序重新执行这些事件,从而使从库的数据状态与主库保持一致。
保证数据准确、有序传输的方式
- 基于事件的记录方式:二进制日志采用基于事件的记录格式,每个事件都包含了完整的操作信息,如插入、更新或删除数据的具体内容。这种方式确保了主库记录的操作能够在从库上准确重现。
- 顺序性:主库按照操作发生的顺序将事件写入二进制日志,日志发送线程也是按照这个顺序读取并发送给从库。从库的I/O线程同样按顺序接收并写入中继日志,SQL线程再按顺序从中继日志中读取并执行事件,从而保证了数据传输和应用的顺序性。
- 日志序列号(Log Sequence Number,LSN):在复制过程中,日志序列号用于跟踪二进制日志和中继日志的写入和读取位置。主库和从库通过LSN确保数据传输的连续性和一致性,任何中断后恢复复制时,可以依据LSN准确找到断点继续传输和应用日志。
- 校验和:MariaDB在二进制日志和中继日志中使用校验和机制。当从库接收日志时,会验证日志内容的完整性,若校验和不匹配,则说明日志传输可能出现错误,此时会触发相应的错误处理机制,确保数据的准确性。