面试题答案
一键面试主服务器(Master)
- 二进制日志(Binary Log):主服务器在执行数据修改操作(如
INSERT
、UPDATE
、DELETE
等)时,会将这些操作记录到二进制日志中。二进制日志记录了数据库的所有更改,用于数据备份和主从复制。 - 主服务器线程:
- I/O线程(Master_IO_Thread):当从服务器连接到主服务器时,主服务器会创建一个I/O线程专门用于与从服务器进行通信。该线程负责读取二进制日志,并将日志内容发送给从服务器。
从服务器(Slave)
- I/O线程(Slave_IO_Thread):从服务器启动复制时,会创建一个I/O线程。该线程连接到主服务器,请求主服务器发送二进制日志内容。它接收主服务器I/O线程发送的二进制日志,并将其写入到本地的中继日志(Relay Log)中。
- 中继日志(Relay Log):用于暂存从主服务器接收到的二进制日志内容。从服务器的I/O线程将主服务器发送的日志写入中继日志,然后由SQL线程来读取和执行这些日志中的操作。
- SQL线程(Slave_SQL_Thread):SQL线程负责读取中继日志中的内容,并按照日志记录的顺序在从服务器上重新执行这些操作,从而使从服务器的数据与主服务器保持同步。
数据同步步骤
- 连接建立:从服务器配置主服务器的连接信息(如主服务器的IP、端口、用户名、密码等),并启动复制。从服务器的I/O线程连接到主服务器,主服务器创建对应的I/O线程。
- 日志发送与接收:主服务器的I/O线程开始读取二进制日志,并将日志内容发送给从服务器的I/O线程。从服务器的I/O线程接收日志并写入中继日志。
- 日志执行:从服务器的SQL线程读取中继日志,执行其中记录的操作,将数据修改应用到从服务器的数据库中,完成数据同步。
- 心跳检测与持续同步:在复制过程中,主从服务器之间会定期进行心跳检测,以确保连接的有效性。如果出现网络故障或其他问题导致连接中断,从服务器会尝试重新连接主服务器,并根据记录的位置继续同步未完成的日志内容。