slave庫寫redo、binlog不實時丟資料的場景
1.slave涉及相關檔案
slave讀取master的binlog日誌後,需要落地3個檔案:relay log、relay log info、master info:
relay log: 即讀取過來的master的binlog,內容與格式與master的binlog一致
relay log info: 記錄SQL Thread應用的relay log的位置、檔案號等資訊
master info: 記錄IO Thread讀取master的binlog的位置、檔案號、延遲等資訊
如果當這3個檔案如果不及時落地,則主機crash後會導致資料的不一致。
2.資訊儲存方式
在MySQL 5.6.2之前,slave記錄的master資訊以及slave應用binlog的資訊存放在檔案中,即master.info與relay-log.info。在5.6.2版本之後,允許記錄到table中,引數設定如下:
master-info-repository = TABLE
relay-log-info-repository = TABLE
對應的表分別為mysql.slave_master_info與mysql.slave_relay_log_info,且這兩個表均為innodb引擎表。
3.控制重新整理引數
relay log、relay log info與master info還有3個引數控制重新整理:
?sync_relay_log:預設為10000,即每10000次sync_relay_log事件會重新整理到磁碟。為0則表示不重新整理,交由OS的cache控制。
?sync_relay_log_info:若relay_log_info_repository為FILE,當設定為0,交由OS重新整理磁碟,預設為10000次重新整理到磁碟;若relay_log_info_repository為TABLE,且為INNODB儲存,則無論為任何值,則都每次evnet都會更新表。
?sync_master_info:若master-info-repository為FILE,當設定為0,則每次sync_master_info事件都會重新整理到磁碟,預設為10000次重新整理到磁碟;若master-info-repository為TABLE,當設定為0,則表不做任何更新,設定為1,則每次事件會更新表 預設為10000
4.建議引數設定
sync_relay_log = 1
sync_master_info = 1
sync_relay_log_info = 1
master-info-repository = TABLE
relay-log-info-repository = TABLE
當這樣設定,導致呼叫fsync()/fdatasync()隨著master的事務的增加而增加,且若slave的binlog和redo也實時重新整理的話,會帶來很嚴重的IO效能瓶頸。
slave讀取master的binlog日誌後,需要落地3個檔案:relay log、relay log info、master info:
relay log: 即讀取過來的master的binlog,內容與格式與master的binlog一致
relay log info: 記錄SQL Thread應用的relay log的位置、檔案號等資訊
master info: 記錄IO Thread讀取master的binlog的位置、檔案號、延遲等資訊
如果當這3個檔案如果不及時落地,則主機crash後會導致資料的不一致。
2.資訊儲存方式
在MySQL 5.6.2之前,slave記錄的master資訊以及slave應用binlog的資訊存放在檔案中,即master.info與relay-log.info。在5.6.2版本之後,允許記錄到table中,引數設定如下:
master-info-repository = TABLE
relay-log-info-repository = TABLE
對應的表分別為mysql.slave_master_info與mysql.slave_relay_log_info,且這兩個表均為innodb引擎表。
3.控制重新整理引數
relay log、relay log info與master info還有3個引數控制重新整理:
?sync_relay_log:預設為10000,即每10000次sync_relay_log事件會重新整理到磁碟。為0則表示不重新整理,交由OS的cache控制。
?sync_relay_log_info:若relay_log_info_repository為FILE,當設定為0,交由OS重新整理磁碟,預設為10000次重新整理到磁碟;若relay_log_info_repository為TABLE,且為INNODB儲存,則無論為任何值,則都每次evnet都會更新表。
?sync_master_info:若master-info-repository為FILE,當設定為0,則每次sync_master_info事件都會重新整理到磁碟,預設為10000次重新整理到磁碟;若master-info-repository為TABLE,當設定為0,則表不做任何更新,設定為1,則每次事件會更新表 預設為10000
4.建議引數設定
sync_relay_log = 1
sync_master_info = 1
sync_relay_log_info = 1
master-info-repository = TABLE
relay-log-info-repository = TABLE
當這樣設定,導致呼叫fsync()/fdatasync()隨著master的事務的增加而增加,且若slave的binlog和redo也實時重新整理的話,會帶來很嚴重的IO效能瓶頸。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2142655/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫篇:mysql日誌型別之 redo、undo、binlog資料庫MySql型別
- MySQL更新資料時,日誌(redo log、binlog)執行流程MySql
- 資料庫讀寫分離Master-Slave資料庫AST
- MySQL:Redo & binlogMySql
- Laravel-Binlog 擴充套件(用於實時監聽 MySQL 資料變更、資料同步等場景)Laravel套件MySql
- 併發場景下資料寫入功能的實現
- MySQL binlog和redo的組提交MySql
- kafka的acks=1策略資料丟失的風險場景Kafka
- MYSQL 是如何保證binlog 和redo log同時提交的?MySql
- 利用binlog2sql閃回丟失資料SQL
- 分散式資料庫的需求與場景分散式資料庫
- Mysql資料庫監聽binlogMySql資料庫
- Elasticsearch 如何保證寫入過程中不丟失資料的Elasticsearch
- 圖資料庫及應用場景資料庫
- 實時資料庫與時序資料庫資料庫
- 刪庫了不用跑路!binlog恢復資料實操
- mysql binlog檢視指定資料庫MySql資料庫
- MySQL資料庫binlog解析神器-binlog2sql應用MySql資料庫
- BES 在大規模向量資料庫場景的探索和實踐資料庫
- redo log 和 binlog 的一些總結
- 從 ClickHouse 到 ByteHouse:實時資料分析場景下的最佳化實踐
- MySQL 日誌系統 redo log、binlogMySql
- 資料庫併發寫入問題-丟失更新與寫入偏差資料庫
- 圖資料庫有哪些應用場景?資料庫
- HTAP資料庫及應用場景分析資料庫
- 雲原生時代資料庫技術趨勢與場景選型資料庫
- 做資料庫分離讀寫時,sqlServer資料庫資料同步的問題:資料庫SQLServer
- 金融業分散式資料庫選型及HTAP場景實踐分散式資料庫
- MySQL資料庫各場景主從高可用架構實戰MySql資料庫架構
- Spring Boot應用中如何動態指定資料庫,實現不同使用者不同資料庫的場景Spring Boot資料庫
- 資料庫資料恢復—無備份,binlog未開啟的Mysql資料庫資料恢復案例資料庫資料恢復MySql
- 寫資料庫實驗報告資料庫
- TSPITR方式資料庫找回誤操作丟失的資料資料庫
- 資料庫技術方案與業務場景的深入融合資料庫
- Oracle Redo丟失恢復方案Oracle
- Elasticsearch如何保證資料不丟失?Elasticsearch
- 基於 MySQL Binlog 的 Elasticsearch 資料同步實踐MySqlElasticsearch
- 實時計算神器:binlog
- Apache Flink 如何正確處理實時計算場景中的亂序資料Apache