17.2.2.1 The Slave Relay Log

relay log, 很像binary log,由一组包含描述数据库改变的events组成,和一个索引文件包含了使用过的relay log的文件名。

术语 中继日志通常 表示一个单独的文件包含数据库的events。

Relay log文件和binary log 文件有相同的格式,可以用mysqlbinlog读取。

默认情况下, relay log 文件名字格式是 host_name-relay-bin.nnnnnn在数据目录,

host_name 是slave server 的主机名和nnnnnn是一个序号,连续的relay log 文件使用连续的序号创建,

从000001开始。 slave 使用一个index file 来跟踪当前使用的relay log 文件,

默认的relay log index file 名字是host_name-relay-bin.index在数据目录。

默认的relay log 文件和relay log index 文件可以被覆盖。

如果slave 使用默认的 host-based relay log 文件名,改变slave的主机名在复制已经创建后

会导致复制失败,打开relay log 文件失败,不能找到目标relay log 。

如果你预期,slave的host name 可能将来会改变, 你可以避免这个问题 采用

–relay-log and –relay-log-index options 来指定relay log 文件名 当你初始化设置slave的时候。

这样 relay log的名字不依赖hostname.

如果你遇到问题在复制开始运行后, 一种方式是停止复制,把旧的relay log index file的内容 到新的,

重启slave. 在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

一个slave 创建一个新的relay log 文件在下面的情况:

  1. 每次 I/O thread starts.
  2. 当日志被flush, with FLUSH LOGS or mysqladmin flush-logs.

3.当前的relay log 文件变的太大,

If the value of max_relay_log_size is greater than 0, that is the maximum relay log file size.

If the value of max_relay_log_size is 0, max_binlog_size determines the maximum relay log file size

mysql> show variables like ‘%max_relay_log_size%’;

+——————–+——-+

| Variable_name | Value |

+——————–+——-+

| max_relay_log_size | 0 |

+——————–+——-+

1 row in set (0.00 sec)

SQL thread 自动删除每个relay log 文件 当它已经执行文件里的所有的events,

不在需要它。