中继日志是连接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命令的参数,重建这些文件。



