前言:MySQL进行主主复制或主从复制的时候会在home目录下面产生相应的relay log,本文档总结这些相关参数的定义及解释
1、什么是relay log
The relay log, like the binary log, consists of a set of numbered files containing events that describe database changes, and an index file that contains the names of all used relay log files.
The term "relay log file" generally denotes an individual numbered file containing database events. The term"relay log" collectively denotes the set of numbered relay log files plus the index file
来源: <http://dev.mysql.com/doc/refman/5.5/en/slave-logs-relaylog.html>
理解:relay log很多方面都跟binary log差不多,区别是:从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器。
2、relay log的相关参数,
通过语句:show variables like '%relay%',查看先骨干的relay的所有相关参数
mysql> show variables like '%relay%';
+-----------------------+----------------+
| Variable_name | Value |
+-----------------------+----------------+
| max_relay_log_size | 0 |
| relay_log | |
| relay_log_index | |
| relay_log_info_file | relay-log.info |
| relay_log_purge | ON |
| relay_log_recovery | OFF |
| relay_log_space_limit | 0 |
| sync_relay_log | 0 |
| sync_relay_log_info | 0 |
+-----------------------+----------------+
9 rows in set (0.08 sec)
2.1 max_relay_log_size:标记relay log 允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小;
2.2 relay_log:定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录,文件名为host_name-relay-bin.nnnnnn(By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory);
2.3 relay_log_index:同relay_log,定义relay_log的位置和名称;
2.4 relay_log_info_file:设置relay-log.info的位置和名称(relay-log.info记录MASTER的binary_log的恢复位置和relay_log的位置)
2.5 relay_log_purge:是否自动清空不再需要中继日志时。默认值为1(启用)。
2.6 relay_log_recovery:当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。
2.7 relay_log_space_limit:防止中继日志写满磁盘,这里设置中继日志最大限额。但此设置存在主库崩溃,从库中继日志不全的情况,不到万不得已,不推荐使用;
2.8 sync_relay_log:这个参数和sync_binlog是一样的,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。
2.9 sync_relay_log_info:这个参数和sync_relay_log参数一样,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay-log.info里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入relay-log.info里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。
3、总结:以上只是简单的介绍了每个参数的作用,这些参数具体的设置还是需要根据每个用户的实际系统情况进行设置的;
=======================
mysql relay_log_info_repository和master_info_repository- relay_log_purge = 1
- relay_log_recovery = 1
- 这两个是启用relaylog的自动修复功能,避免由于网络之类的外因造成日志损坏,主从停止。
- master_info_repository = TABLE
- relay_log_info_repository = TABLE
- 这两个参数会将master.info和relay.info保存在表中,默认是Myisam引擎,官方建议用
- alter table slave_master_info engine=innodb;
- alter table slave_relay_log_info engine=innodb;
- alter table slave_worker_info engine=innodb;
- 改为Innodb引擎,防止表损坏后自行修复。
- 3.在my.cnf中设置
- relay_log_info_repository = TABLE
- master_info_repository = TABLE
- relay_log_recovery = on
- mysql> show variables like '%relay_log_info_repository%';
- +---------------------------+-------+
- | Variable_name | Value |
- +---------------------------+-------+
- | relay_log_info_repository | FILE |
- +---------------------------+-------+
- 1 row in set (0.00 sec)
- mysql> show variables like '%master_info_repository%';
- +------------------------+-------+
- | Variable_name | Value |
- +------------------------+-------+
- | master_info_repository | FILE |
- +------------------------+-------+
- 1 row in set (0.00 sec)
- mysql> desc mysql.slave_master_info