前言: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
