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 文件在下面的情况:
- 每次 I/O thread starts.
- 当日志被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,
不在需要它。