中继日志与二进制日志类似,它包含一系列编号文件,这些文件包含描述数据库更改的事件,以及一个索引文件,其中包含所有已使用中继日志文件的名称。中继日志文件的默认位置是数据目录。
术语 “中继日志文件” 通常表示包含数据库事件的单个编号文件。术语 “中继日志” 统称包含编号的中继日志文件以及索引文件。
中继日志文件与二进制日志文件具有相同的格式,可以使用 mysqlbinlog 读取(参见 第 6.6.9 节 “mysqlbinlog — 用于处理二进制日志文件的实用工具”)。如果启用了二进制日志事务压缩,则写入中继日志的事务有效载荷会以与二进制日志相同的方式进行压缩。有关二进制日志事务压缩的更多信息,请参见 第 7.4.4.5 节 “二进制日志事务压缩”。
对于默认复制通道,中继日志文件名具有默认形式
,其中 主机名
-relay-bin.nnnnnn
主机名
是副本服务器主机的名称,nnnnnn
是序列号。从 000001
开始,使用连续的序列号创建连续的中继日志文件。对于非默认复制通道,默认基本名称为
,其中 主机名
-relay-bin-通道
通道
是记录在中继日志中的复制通道的名称。
副本使用索引文件跟踪当前使用的中继日志文件。对于默认通道,默认的中继日志索引文件名是
,对于非默认复制通道,默认的中继日志索引文件名是 主机名
-relay-bin.index
。主机名
-relay-bin-通道
.index
可以使用 relay_log
和 relay_log_index
系统变量分别覆盖默认的中继日志文件和中继日志索引文件名和位置(参见 第 19.1.6 节 “复制和二进制日志选项和变量”)。
如果副本使用默认的基于主机的中继日志文件名,在设置复制后更改副本的主机名会导致复制失败,并出现错误 无法打开中继日志 和 在中继日志初始化期间找不到目标日志。这是一个已知问题(参见错误 #2122)。如果您预期副本的主机名将来可能会更改(例如,如果在副本上设置了网络,这样就可以使用 DHCP 修改其主机名),您可以通过使用 relay_log
和 relay_log_index
系统变量在您最初设置副本时明确指定中继日志文件名来完全避免此问题。这将导致文件名独立于服务器主机名的更改。
如果您在复制已经开始后遇到此问题,解决此问题的一种方法是停止副本服务器,将旧中继日志索引文件的内容追加到新索引文件,然后重新启动副本。在 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 LOGS
或 mysqladmin flush-logs)。当当前中继日志文件的大小变得太大时,这将根据以下方式确定
如果
max_relay_log_size
的值大于 0,则该值即为最大中继日志文件大小。如果
max_relay_log_size
的值为 0,则max_binlog_size
决定最大中继日志文件大小。
复制 SQL(应用器)线程会在执行完文件中的所有事件并不再需要它后自动删除每个中继日志文件。没有明确的机制来删除中继日志,因为复制 SQL 线程会负责删除它们。但是,FLUSH LOGS
会轮换中继日志,这会影响复制 SQL 线程何时删除它们。