16.2.4.1 中继日志

中继日志与二进制日志一样,由一组编号文件和一个索引文件组成,其中编号文件包含描述数据库更改的事件,而索引文件则包含所有已使用中继日志文件的名称。

术语“中继日志文件”通常 table 示包含数据库事件的单独编号文件。术语“中继日志”统称为带编号的中继日志文件加索引文件的集合。

中继日志文件与二进制日志文件具有相同的格式,可以使用mysqlbinlog(请参阅第 4.6.7 节“ mysqlbinlog-处理二进制日志文件的 Util”)读取。

默认情况下,中继日志文件名在数据目录中的格式为host_name-relay-bin.nnnnnn,其中* host_name *是副本服务器主机的名称,而_nnnnnn *是序列号。使用以000001开头的连续序列号创建连续中继日志文件。副本使用索引文件来跟踪当前使用的中继日志文件。数据目录中的默认中继日志索引文件名是host_name-relay-bin.index

缺省中继日志文件和中继日志索引文件名可以分别使用relay_logrelay_log_index系统变量(请参见第 16.1.6 节“复制和二进制日志记录选项和变量”)覆盖。

如果副本使用默认的基于主机的中继日志文件名,则在设置复制后更改副本的主机名可能会导致复制失败,并显示以下错误:无法打开中继日志,并且在中继日志初始化期间找不到目标日志。这是一个已知问题(请参见 Bug#2122)。如果您预计副本的主机名将来可能会更改(例如,如果在副本上设置了网络,以便可以使用 DHCP 修改其主机名),则可以使用relay_logrelay_log_index系统完全避免此问题初始设置副本时,用于显式指定中继日志文件名的变量。这将使名称独立于服务器主机名更改。

如果在复制开始后遇到问题,一种解决方法是停止副本服务器,将旧中继日志索引文件的内容放在新副本服务器的前面,然后重新启动副本。在 Unix 系统上,可以按以下所示进行操作:

shell> cat new_relay_log_name.index >> old_relay_log_name.index
shell> mv old_relay_log_name.index new_relay_log_name.index

副本服务器在以下情况下创建一个新的中继日志文件:

复制 SQL 线程在执行每个中继日志文件中的所有事件并且不再需要该文件后,会自动删除该文件。没有删除中继日志的显式机制,因为复制 SQL 线程会这样做。但是,FLUSH LOGS旋转中继日志,这会影响复制 SQL 线程删除它们的时间。