MySQL Replication--中繼日志更新


RELAY LOG相關參數

設置如何保存從節點接收到的主庫BINLOG

sync_relay_log :
設置如何同步中繼日志到中繼日志文件。
當sync_relay_log = 0時,則MySQL服務不會對中繼日志文件進行同步操作,依賴於操作系統來定期進行同步。
當sync_relay_log = N(N>0),則每N個sync_relay_log事件后對中繼日志文件執行一次同步(調用fdatasync())。

 

設置如何保存從節點接收主庫BINLOG的進度信息

master_info_repository:
用於設置如何保存從節點接收到主庫BINLOG的位點信息,可選參數可選參數值FILE|TABLE,默認參數為FILE。

sync_master_info:
參數值N(int),用於設置當N次sync_master_info事件后將信息同步到文件或同步到表中,默認參數值為1000
當master_info_repository = FILE時,如果sync_master_info=0,則MySQL服務不會對master.info文件進行同步操作,依賴於操作系統來定期進行同步。
當master_info_repository = TABLE時,如果sync_master_info=0,則MySQL服務不會更新mysql.slave_master_info的數據。
修改sync_master_info參數值不需要關閉復制進程,修改即時生效。

 

設置如何保存從節點上應用RELAYLOG的進度信息

relay_log_info_repository :
用於設置如何保存從節點上應用中繼日志的位置信息,可選參數可選參數值FILE|TABLE,默認參數為FILE。
如果設置為FILE,信息存放到relay-log.info文件中,如果設置為TABLE,信息存放到mysql.slave_relay_log_info中。
如果使用多源復制,必須使用TABLE參數值。
修改relay_log_info_repository 參數的值需先關閉復制進程再修改然后重啟復制線程。

sync_relay_log_info :
用於設置如何將應用中繼日志的位置信息同步到文件和表中,默認參數為10000
當sync_relay_log_info = FILE時:
	如果sync_relay_log_info=0,則MySQL服務不會對relay-log.info文件進行同步操作,依賴於操作系統來定期進行同步。
	如果sync_relay_log_info=N(N>0),則每執行N個事務后將信息使用fdatasync()同步到relay-log.info文件。
當sync_relay_log_info = TABLE 且表mysql.slave_relay_log_info使用事務存儲引擎如Innodb:
	在每次事務后都會更新mysql.slave_relay_log_info表的數據,忽略sync_relay_log_info的設置。
當sync_relay_log_info = TABLE 且表mysql.slave_relay_log_info不使用存儲引擎如MyISAM:
	如果sync_relay_log_info=0,則不更新表mysql.slave_relay_log_info的數據。
	如果sync_relay_log_info=N(N>0),則每執行N個事務后更新表mysql.slave_relay_log_info的數據。

 

設置如何恢復RELAY LOG

relay_log_recovery
用於設置在relay-log出現問題時如何修復,默認值為0(不開啟)
當slave從庫宕機后,假如relay-log損壞了,導致一部分中繼日志沒有處理,則自動放棄所有未執行的relay-log,並且重新從master上獲取日志,這樣就保證了relay-log的完整性

當MTS開啟后,如果設置relay_log_recovery=1,從節點意外重啟或被強制kill后重啟,會有如下錯誤:
relay-log-recovery cannot be executed when the slave was stopped with an error or killed in MTS mode

 

如果從節點上relay_log_info_repository= file 或sync_relay_log_info<>1時,如果從節點發生故障重啟,就可能出現從節點已應用第XXX條日志,但relay_log_info中記錄的還是第XXX-N的位置,從節點從第XXX-N條日志進行重做,這部分relay log被重復執行,報1032和1062的錯誤,導致同步失敗。因此推薦進行如下設置:

master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=1

1、由於設置relay_log_recovery=1,當Relay Log出現異常時,能自動恢復,因此無需每次同步RALAY LOG都刷新進度信息(sync_master_info)和每次將RALAY LOG刷新到磁盤(sync_relay_log)

2、由於設置relay_log_info_repository=TABLE,且表mysql.slave_relay_log_info默認使用InnoDB存儲引擎,因為每次應用RALAY LOG中的事件都會刷新mysql.slave_relay_log_info表數據,忽略參數sync_master_info的設置。

 

RELAY LOG文件生成與刪除

Relaylog的生成:
寫入一個從Master端得到的event后,會判斷當前文件是否超過max_relay_log_size,如果超過則生成一個新的relaylog

Relaylog的刪除:
1>當SQL線程執行完該Relaylog最后一個event后,會判斷該文件是否還需要保留,如果不需要保留,則刪除
2>在實例啟動和flush logs時,判斷relay log是否超過expire-log-days的限制,如果超過,則刪除

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM