天天看點

MySQL relay log 詳細參數解釋

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

| relay_log                 

| relay_log_basename       

| relay_log_index          

| relay_log_info_file        

| relay_log_info_repository  

| relay_log_purge            

| relay_log_recovery         

| relay_log_space_limit     

| sync_relay_log               

| sync_relay_log_info  

參數詳細解釋:

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的位置和名稱,如果值為空,則預設位置在資料檔案的目錄(datadir),檔案名為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的位置和名稱;一般和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、總結:以上隻是簡單的介紹了每個參數的作用,這些參數具體的設定還是需要根據每個使用者的實際系統情況進行設定的;

推薦從庫線上環境使用以下配置

<code>#relay log</code>

<code>max_relay_log_size = 0;</code>

<code>relay_log=$datadir/relay-bin</code>

<code>relay_log_purge = 1;</code>

<code>relay_log_recovery = 1;</code>

<code>sync_relay_log =0;</code>

<code>sync_relay_log_info = 0;</code>

如果是mha環境,則| relay_log_purge 不要開啟,設定為0,可以使用 purge_relay_logs 來定期清除

參考連結:

http://douya.blog.51cto.com/6173221/1788772

      本文轉自crazy_charles 51CTO部落格,原文連結:http://blog.51cto.com/douya/1788753,如需轉載請自行聯系原作者