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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 恢復REDO Log丟失的Oracle資料庫Oracle資料庫
- Laravel-Binlog 擴充套件(用於實時監聽 MySQL 資料變更、資料同步等場景)Laravel套件MySql
- MySQL更新資料時,日誌(redo log、binlog)執行流程MySql
- 資料庫篇:mysql日誌型別之 redo、undo、binlog資料庫MySql型別
- 資料庫讀寫分離Master-Slave資料庫AST
- 併發場景下資料寫入功能的實現
- 雲資料庫HBase大資料儲存及實時分析場景應用解析資料庫大資料
- MySQL:Redo & binlogMySql
- 分散式資料庫的需求與場景分散式資料庫
- 幾種場景的資料庫恢復資料庫
- 資料庫啟動時丟失資料檔案模擬實驗資料庫
- redo log 丟失(非歸檔模式,資料庫正常關閉,redo log 被誤刪除!)模式資料庫
- 圖資料庫及應用場景資料庫
- NoSQL資料庫的35個應用場景SQL資料庫
- TiDB 作為 MySQL Slave 實現實時資料同步TiDBMySql
- . 資料庫臨時表空間的資料檔案的丟失資料庫
- Elasticsearch 如何保證寫入過程中不丟失資料的Elasticsearch
- Android資料庫升級不丟失資料解決方案Android資料庫
- 實時資料庫與時序資料庫資料庫
- BES 在大規模向量資料庫場景的探索和實踐資料庫
- 利用binlog2sql閃回丟失資料SQL
- 圖資料庫有哪些應用場景?資料庫
- HTAP資料庫及應用場景分析資料庫
- 從 ClickHouse 到 ByteHouse:實時資料分析場景下的最佳化實踐
- MYSQL 是如何保證binlog 和redo log同時提交的?MySql
- MySQL binlog和redo的組提交MySql
- MySQL資料庫各場景主從高可用架構實戰MySql資料庫架構
- data guard failover時最小化資料丟失 - 11g flush redo - 2AI
- data guard failover時最小化資料丟失 - 11g flush redo - 1AI
- oracle資料庫redo檔案的blocksizeOracle資料庫BloC
- Oracle資料庫Redo故障的恢復Oracle資料庫
- Mysql資料庫監聽binlogMySql資料庫
- 資料庫技術方案與業務場景的深入融合資料庫
- 資料庫併發寫入問題-丟失更新與寫入偏差資料庫
- RESET MASTER和RESET SLAVE使用場景和說明AST
- 更改MYSQL資料庫不區分大小寫MySql資料庫
- 金融業分散式資料庫選型及HTAP場景實踐分散式資料庫
- 做資料庫分離讀寫時,sqlServer資料庫資料同步的問題:資料庫SQLServer