17.2.2.1 The Slave Relay Log Slave中继日志
中继日志, 像binary log,有一组文件组成包含events 描述数据库的修改,和一个index文件包含所有使用过的relay log文件的名字
术语"relay log file"通常表示一个但都数字文件包含数据库events.
Relay log 文件有相同的格式和binary log 文件可以使用mysqlbinlog读取
默认情况下,relay log 文件名格式为host_name-relay-bin.nnnnnn 在数据目录,
host_name 是slave server host的名字 nnnnnn 是一个序列号。
slave 使用一个index file 来跟踪 relay log files 当前在使用的
默认的 relay log index file 名字是 host_name-relay-bin.index在数据目录下
默认的relay log 文件和relay log index 名字可以覆盖
如果一个slave 使用默认的基于主机名的relay log file names,
改变一个slave的host name 在复制已经被设置后会导致复制失败由于打开relay log文件失败,不能找到目标日志
如果你预期 一个slave的host name 可能将来被改变,你可以避免这个问题通过使用
--relay-log and --relay-log-index options 来指定relay log文件名 当你在初始化设置slave的时候
这样会让名字于server hostname 无关
如果你遇到的问题在复制已经开始,一种方式是停止server,谋划旧的日志到新的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
A slave server creates a new relay log file under the following conditions:
一个slave server 创建一个新的relay log 在下面的条件:
1. 每次 I/O thread 启动
2. 当日志被刷新,比如 FLUSH LOGS or mysqladmin flush-logs.
3.当当前的relay logfile的大小变的太大,
mysql> show variables like '%max_relay_log_size%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_relay_log_size | 0 |
+--------------------+-------+
1 row in set (0.00 sec)
1.如果 max_relay_log_size 值是大于0, 那是最大的relay log file size
2.如果值为0,max_binlog_size 决定了relay log files的最大值
mysql> show variables like '%max_binlog_size%';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| max_binlog_size | 536870912 |
+-----------------+-----------+
1 row in set (0.00 sec)
mysql> exit
Bye
Vsftp:/data01/mysql# cat /etc/my.cnf | grep max_binlog_size
max_binlog_size = 512M
Vsftp:/data01/mysql#
SQL thread 自动删除每个relay log文件一旦他已经执行了所有的events 不再被需要。
这里没有机制对于删除relay log 因为SQL thread 做这个事情