深入理解MySQL——中继日志的结构

本文详细介绍了MySQL复制机制中的中继日志,包括其作用、结构和管理方式。中继日志作为主从复制的关键,由I/O线程读取主服务器事件并写入,而SQL线程负责执行这些事件。此外,还提到了中继日志文件的创建、命名规则以及与二进制日志的相似性。中继日志信息文件和master日志信息文件用于跟踪复制进度。在主从同步过程中,中继日志起到缓冲作用,确保主服务器不必等待从服务器执行完成即可发送新的事件。
摘要由CSDN通过智能技术生成

中继日志需要与复制机制中的从服务器一起使用。复制从服务器负责接收来自主服务器的各种数据修改信息(即“事件”),并在接收到它们时将其写到中继日志。从服务器会将中继日志当作一个保存区,其中存储的事件会被保留到它们被从服务器执行为止。

在从服务器上,有两个线程分别负责处理事件的读取和执行。其中,I/O线程负责从主服务器读取事件,并把它们写到中继日志;SQL线程负责读取中继日志文件,执行其中包含的事件,并删除每个处理完毕的文件。这种功能上的不相干让这两个线程可以各自独立地运行。

中继日志与二进制日志有几个共同的特点。

  • 服务器会按编号顺序创建中继日志文件。
  • 有一个索引文件,其中列出的是当前存在的所有中继日志文件集。
  • 中继日志文件的格式与二进制日志文件相同,因此可以使用工具程序mysqlbinlog来显示它们的内容。

启用中继日志的方法是指定–relay-log选项。如果在指定此选项时没有带上文件名,服务器会以 HOSTWAME-relay-bin 作为基本名,按编号顺序生成中继日志文件,如 HOSTWAME-relay-bin.000001、HOS7WAME-relay-bin.000002,依此类推。否则,服务器会使用你指定的名字作为顺序基本名(如果名字里包含扩展名,扩展名会被忽略掉)。此后,当你每次启动服务器、刷新日志,或者当前日志文件的大小已达到其最大值时,服务器便会按编号顺序生成下一个文件。这个大小由系统变量max_relay_log_size的值来确定。

如果启用了中继日志功能,那么服务器还会创建一个附带的中继日志索引文件,用来列出现有中继日志文件的名字。默认的索引文件名与中继日志文件的基本名一样,扩展名为.index。使用–relay-log-index选项,可以显式地指定一个名字。如果指定的名字里不包含扩展名,服务器会自动为其加上一个扩展名.index。例如,如果你指定的内容是–relay-log-index=relay-log,那么索引文件名就会变成relay-log.index。

中继日志是连接master和slave的信息———它是复制的核心。明白如何使用中继日志,以及如何通过中继日志来协调slave线程,这点很重要。因此,这里将深入研究中继日志的结构,以及slave线程是如何使用中继日志来处理复制的。I/O线程将来自master的事件存储到中继日志中。中继日志充当缓冲,这样master不必等待slave执行完成就可以发送下一个事件。
下图给出了中继日志的示意图,其结构与master的binlog类似,不过多了一些文件。
在这里插入图片描述

除了二进制日志中的内容文件和索引文件以外,中继日志还维护两个文件来跟踪复制的进度,即中继日志信息文件和master日志信息文件。这两个文件的名字由my.cnf配置文件中的两个参数来控制∶

relay-log-info-file=filename

这个选项设置中继日志信息文件名。也可以作为只读服务器变量relay_log_info_file。如果没有提供完整的文件名,则该文件位于服务器的数据目录下。默认文件名为relay-log.info。

master-info-file=filename

这个参数设置 master 日志信息文件名。默认文件名为master∶info。为了便于叙述,下面的讨论中我们采用信息文件的默认文件名。master.info文件包含master的读位置,以及连接master和启动复制必需的所有信息。当slave的I/O线程启动时,如果有master.info文件,则线程从这个文件读取信息。示例8-1给出了master.info文件的简单示例。我们在每行前面加了行号,而且每行末都有斜体标注(文件本身没有这些注释)。如果服务器编译不支持SSL,则没有第9-15 行(含有所有SSL参数)。示例8-1给出了带有SSL编译的参数设置。SSL字段稍后进行介绍。

master.info文件的内容(MySQL5.6.12)

1 23 文件中的行数
2 master-bin.000001  当前正在读取的binlog文件(Master_Log_File)最后读取的 binlog位置(Read Master Log_Pos)
3 151 
4 localhost master 连接的主机(Master Host)
5 root 复制用户(Master_User)
6 复制密码
7 13000 master所使用的端口号(Master Host)slave尝试重新连接的次数(Connect_Retry)
8 60 如果启用了SSL,值为1,否则为θ
9 0 
10 SSL认证机构(CA)SSL CA路径
11 SSL证书
12 SSL密码
13 SSL密钥
14 SSL验证服务器证书
15 0 
16 60.000 心跳
17 绑定地址
18 0 忽略服务器ID
19 Master UUID 8c6d027e-cf38-11e2-84c7-0021cc6850ca
20 10 重试次数SSL CRL 
21 SSL CRL路径
22 自动位置
23 0

如果是老版本的服务器,格式可能略有不同。MySQL4.1之前的版本没有第一行。开发人员在4.1.1版本中添加了行号,这样可以为文件扩展新字段,并通过检查行号来检测支持哪些字段。5.1.16版本引入了第15行,即SSL Verify Server Certificate,这后面的行在5.6系列版本引入。relay-loginfo文件跟踪复制的进度,并由SQL线程负责更新。示例8-2给出了relay-log. info文件的一段样本,这些行对应下一个即将执行的事件的开始。
示例8-2∶ relay-log.info文件的内容

./slave-relay-bin.000003   中继日志文件(Relay_Log_File)
380                        中继日志位置(Relay_Log_Pos)
master1-bin.000001 master  日志文件(Relay Master Log File)
234 master                 日志位置(Exec_Master_Log_Pos)

如果某些文件不可用,在slave启动的时候,能够根据my.cnf文件中的信息及CHANGE MASTER TO命令的参数,重建这些文件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月微风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值