中继日志与二进制日志一样,由一组编号文件和一个索引文件组成,其中编号文件包含描述数据库更改的事件,而索引文件则包含所有已使用中继日志文件的名称。
术语“ 中继日志文件 ”通常表示包含数据库事件的单独编号文件。术语 “ 中继日志 ”共同表示编号的中继日志文件加上索引文件的集合。
中继日志文件具有与二进制日志文件相同的格式,可以使用mysqlbinlog读取(请参见 第4.6.8节“ mysqlbinlog-用于处理二进制日志文件的实用程序”)。
默认情况下,中继日志文件名 在数据目录中具有格式 ,其中 是从属服务器主机的名称,并且是序列号。连续中继日志文件是使用以开头的连续序列号创建的。从站使用索引文件来跟踪当前使用的中继日志文件。缺省中继日志索引文件名 位于数据目录中。 host_name-relay-bin.nnnnnnhost_namennnnnn000001host_name-relay-bin.index
缺省中继日志文件和中继日志索引文件名可以分别使用relay_log和 relay_log_index系统变量覆盖 (请参见第17.1.4节“复制和二进制日志记录选项和变量”)。
如果从站使用默认的基于主机的中继日志文件名,则在设置复制后更改从站的主机名可能导致复制失败,并显示以下错误:无法打开中继日志,并且在中继日志初始化期间找不到目标日志。这是一个已知问题(请参见Bug#2122)。如果您预计从站的主机名将来可能会更改(例如,如果在从站上设置了网络,以便可以使用DHCP修改其主机名),则可以使用relay_log和来 完全避免此问题。 relay_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
从属服务器在以下条件下创建一个新的中继日志文件:
每次I / O线程启动。
清除日志时(例如,使用 FLUSH LOGS或 mysqladmin flush-logs)。
当前中继日志文件的大小变为 “ 太大 ”时,确定如下:
如果值 max_relay_log_size大于0,则为最大中继日志文件大小。
如果值为 max_relay_log_size0,则max_binlog_size 确定最大中继日志文件大小。
SQL线程在执行每个中继日志文件中的所有事件并且不再需要该事件后,会自动删除该文件。没有明确的机制可以删除中继日志,因为SQL线程会这样做。但是, FLUSH LOGS旋转中继日志,这会影响SQL线程删除它们的时间。