默认情况,中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪索引文件中目前正使用的中继日志。 默认中继日志索引文件名为host_name-relay-bin.index。默认情况,在从服务器的数据目录中创建这些文件。可以用--relay-log和--relay-log-index服务器选项覆盖 默认文件名。参见6.8节,“复制启动选项”。
中继日志与二进制日志的格式相同,并且可以用mysqlbinlog读取。SQL线程执行完中继日志中的所有事件并且不再需要之后,立即自动删除它。没有直接的删除中继日志的机制,因为SQL线程可以负责完成。然而,FLUSH LOGS可以循环中继日志,当SQL线程删除日志时会有影响。
在下面的条件下创建新的中继日志:
· 每次I/O线程启动时创建一个新的中继日志。
· 当日志被刷新时;例如,用FLUSH LOGS或mysqladmin flush-logs。
· 当当前的中继日志文件变得太大时。“太大”含义的确定方法:
o max_relay_log_size,如果max_relay_log_size > 0
o max_binlog_size,如果max_relay_log_size = 0
从属复制服务器在数据目录中另外创建两个小文件。这些状态文件默认名为主master.info和relay-log.info。它们包含SHOW SLAVE STATUS语句的输出所显示的信息(关于该语句的描述参见13.6.2节,“用于控制从服务器的SQL语句”)。状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。
由I/O线程更新master.info文件。文件中的行和SHOW SLAVE STATUS显示的列的对应关系为:
行 |
描述 |
1 |
文件中的行号 |
2 |
Master_Log_File |
3 |
Read_Master_Log_Pos |
4 |
Master_Host |
5 |
Master_User |
6 |
密码(不由SHOW SLAVE STATUS显示) |
7 |
Master_Port |
8 |
Connect_Retry |
9 |
Master_SSL_Allowed |
10 |
Master_SSL_CA_File |
11 |
Master_SSL_CA_Path |
12 |
Master_SSL_Cert |
13 |
Master_SSL_Cipher |
14 |
Master_SSL_Key |
由SQL线程更新relay-log.info文件。文件中的行和SHOW SLAVE STATUS显示的列的对应关系为:
行 |
描述 |
1 |
Relay_Log_File |
2 |
Relay_Log_Pos |
3 |
Relay_Master_Log_File |
4 |
Exec_Master_Log_Pos |
当备份从服务器的数据时,你还应备份这两个小文件以及中继日志文件。它们用来在恢复从服务器的数据后继续进行复制。如果丢失了中继日志但仍然有relay-log.info文件,你可以通过检查该文件来确定SQL线程已经执行的主服务器中二进制日志的程度。然后可以用Master_Log_File和Master_LOG_POS选项执行CHANGE MASTER TO来告诉从服务器重新从该点读取二进制日志。当然,要求二进制日志仍然在主服务器上。
如果从服务器正复制LOAD DATA INFILE语句,你应也备份该目录内从服务器用于该目的的任何SQL_LOAD-*文件。从服务器需要这些文件继续复制任何中断的LOAD DATA INFILE操作。用--slave-load-tmpdir选项来指定目录的位置。如果未指定, 默认值为tmpdir变量的值。