Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

19.2.4.1 中继日志

中继日志,类似于二进制日志,由一组编号的文件组成,包含数据库更改事件,并且有一个索引文件,包含所有使用的中继日志文件的名称。默认情况下,中继日志文件位于数据目录中。

术语 中继日志文件 通常指的是包含数据库事件的单个编号文件。术语 中继日志 集体地指的是编号中继日志文件集加上索引文件。

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

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

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

默认中继日志文件和中继日志索引文件名和位置可以使用 relay_logrelay_log_index 系统变量覆盖(见 第 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(receiver)线程启动时。

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

  • 当当前中继日志文件的大小变得太大时,这是根据以下方式确定的:

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