面试题答案
一键面试MariaDB中relay - log的工作原理
- 接收主库日志:
- MariaDB作为从库时,通过I/O线程与主库建立连接。I/O线程会向主库发送请求,获取主库二进制日志(binary log)的内容。主库会将二进制日志中的事件(如数据修改操作等)以日志的形式发送给从库的I/O线程。I/O线程接收这些日志数据,并将其写入到relay - log中。这个过程类似于主库把自己的操作记录发送给从库,从库的I/O线程负责接收并保存。
- 存储:
- relay - log以文件的形式存储在从库的文件系统中。文件命名通常遵循一定的规则,例如
relay - log.xxxxxx
,其中xxxxxx
是序号。每个relay - log文件有一定的大小限制,当一个relay - log文件写满时,会自动创建一个新的relay - log文件继续存储日志数据。从库会维护一个索引文件(通常命名为relay - log.index
),用于记录当前所有relay - log文件的路径和顺序,以便能够快速定位和读取日志内容。
- relay - log以文件的形式存储在从库的文件系统中。文件命名通常遵循一定的规则,例如
- 应用:
- 从库的SQL线程负责从relay - log中读取日志内容,并将这些日志中的事件应用到从库的数据库中,使从库的数据与主库保持一致。SQL线程按照日志记录的顺序依次执行这些事件,例如执行插入、更新、删除等操作,从而保证从库数据与主库数据在逻辑上的一致性。这个过程就像是从库根据主库的操作记录,在自己的数据库上重放这些操作。
与relay - log相关的重要配置参数及影响
- relay_log:
- 作用:指定relay - log文件的基本名称和存储路径。
- 影响:合理设置存储路径可以避免与其他重要数据存储在同一磁盘分区,防止磁盘空间不足影响从库运行。如果设置不当,如路径不存在或没有写入权限,会导致relay - log无法正常创建和写入,进而影响主从复制。
- relay_log_index:
- 作用:指定relay - log索引文件的名称和路径。
- 影响:索引文件对快速定位relay - log文件至关重要。若索引文件路径设置错误,SQL线程可能无法正确找到relay - log文件,导致主从复制中断。
- relay_log_space_limit:
- 作用:设置relay - log文件占用的最大空间。
- 影响:当relay - log文件占用空间达到这个限制时,从库会自动删除不再需要的旧relay - log文件,以避免磁盘空间被耗尽。若设置过小,可能导致频繁删除relay - log文件,影响主从复制性能;若设置过大,可能会占用过多磁盘空间,甚至导致磁盘空间不足。
- sync_relay_log:
- 作用:控制relay - log文件同步到磁盘的频率。
- 影响:值为0时,MySQL依赖操作系统的缓存机制来刷新日志到磁盘,性能较高但在系统崩溃时可能丢失部分日志数据;值为1时,每次写入relay - log都会同步到磁盘,数据安全性高但性能有所下降;其他大于1的值表示每写入
N
次同步一次到磁盘,是在性能和数据安全之间的一种平衡。
- slave_parallel_workers:
- 作用:从MySQL 5.6开始引入,用于设置从库并行复制的线程数,这些线程会并行读取和应用relay - log中的日志事件。
- 影响:合理设置该参数可以充分利用多核CPU的性能,提高主从复制的速度。但如果设置过大,可能会因为资源竞争(如I/O、内存等)导致性能下降。