Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


19.2.4.1 中继日志

中继日志,类似于二进制日志,包括一组带编号的文件,包含描述数据库更改的事件,以及一个索引文件,包含所有使用的中继日志文件的名称。中继日志文件的默认位置是数据目录。

术语“中继日志文件”通常指的是一个带编号的文件,包含数据库事件。术语“中继日志”collectively denotes the set of numbered relay log files plus the index file。

中继日志文件的格式与二进制日志文件相同,可以使用mysqlbinlog工具来读取(见Section 6.6.9, “mysqlbinlog — Utility for Processing Binary Log Files”)。如果使用二进制日志事务压缩,中继日志中的事务负载将以相同的方式压缩。有关二进制日志事务压缩的更多信息,请见Section 7.4.4.5, “Binary Log Transaction Compression”

对于默认复制通道,中继日志文件名的默认形式为host_name-relay-bin.nnnnnn,其中host_name是复制服务器主机的名称,nnnnnn是顺序号。连续的中继日志文件使用连续的顺序号,开始于000001。对于非默认复制通道,default base name 是host_name-relay-bin-channel,其中channel是复制通道的名称记录在中继日志中。

复制服务器使用索引文件来跟踪当前使用的中继日志文件。默认的中继日志索引文件名是host_name-relay-bin.index对于默认通道,和host_name-relay-bin-channel.index对于非默认复制通道。

可以使用relay_logrelay_log_index系统变量来覆盖默认的中继日志文件和索引文件名和位置(见Section 19.1.6, “Replication and Binary Logging Options and Variables”)。

如果复制服务器使用默认的基于主机的中继日志文件名,修改复制服务器的主机名后,复制可能会失败,并出现错误Failed to open the relay logCould not find target log during relay log initialization。这是一个已知的问题(见Bug #2122)。如果您预期复制服务器的主机名可能会更改(例如,如果在复制服务器上设置了DHCP),可以在初始化复制服务器时使用relay_logrelay_log_index系统变量来指定中继日志文件名,这样名称将独立于服务器主机名更改。

如果您在复制已经开始后遇到这个问题,一种解决方法是停止复制服务器, prepend 旧中继日志索引文件的内容到新文件,然后重新启动复制服务器。在Unix系统上,这可以按照以下方式进行:

$> cat new_relay_log_name.index >> old_relay_log_name.index
$> mv old_relay_log_name.index new_relay_log_name.index

复制服务器在以下情况下创建新的中继日志文件:

  • 每次复制I/O(接收)线程启动时。

  • 当日志被刷新(例如,使用FLUSH LOGSmysqladmin flush-logs)。

  • 当当前中继日志文件大小超过最大值时,这个最大值是根据以下方式确定的:

复制SQL(应用)线程自动删除每个中继日志文件,直到它执行了该文件中的所有事件并不再需要它。没有明确的机制来删除中继日志,因为复制SQL线程负责这样做。然而,FLUSH LOGS旋转中继日志,这影响了复制SQL线程删除它们的时间。