【Mysql】master_info 與 relay_info對資料庫的影響
在MySQL 5.6.2之前,slave記錄的master資訊以及slave應用binlog的資訊存放在檔案中,即master.info與relay-log.info。在5.6.2版本之後,允許記錄到table中,引數設定如下:
master-info-repository = TABLE ---FILE表示以檔案方式
relay-log-info-repository = TABLE ---FILE表示以檔案方式
對應的表分別為mysql.slave_master_info與mysql.slave_relay_log_info,且這兩個表均為innodb引擎表。
master info與relay info還有3個引數控制重新整理:
-
sync_relay_log:控制著relay log二進位制日誌的寫入重新整理操作
-
- 預設為10000,即每10000次sync_relay_log事件會重新整理到磁碟。
- 如果值>0, MySQL SERVER 同步它的relay log 到磁碟(寫入中繼日誌,使用fdatasync()) 在every sync_relay_log events are written to the relay log.)
- 當設定為1時,slave的I/O執行緒每次接收到master傳送過來的binlog日誌都要寫入系統緩衝區,然後刷入relay log中繼日誌裡,這樣是最安全的,因為在崩潰的時候,你最多會丟失一個事務,但會造成
- 磁碟的大量I/O。
-
- 當設定為0時,並不是馬上就刷入中繼日誌裡,而是由作業系統決定何時來寫入,雖然安全性降低了,但減少了大量的磁碟I/O操作。
-
-
sync_master_info:控制master_info資訊的更新操作
若master-info-repository為FILE,當設定為0,則每次sync_master_info事件都會重新整理到磁碟,預設為10000次重新整理到磁碟;
若master-info-repository為TABLE,當設定為0,則表不做任何更新,設定為1,則每次事件會更新表 #預設為10000
sync_relay_log_info:控制relay_log_info資訊的更新操作
若relay_log_info_repository為FILE,當設定為0,交由OS重新整理磁碟,預設為10000次重新整理到磁碟;
若relay_log_info_repository為TABLE,且為INNODB儲存,則無論為任何值,則都每次evnet都會更新表。
若master-info-repository為FILE,當設定為0,則每次sync_master_info事件都會重新整理到磁碟,預設為10000次重新整理到磁碟;
若master-info-repository為TABLE,當設定為0,則表不做任何更新,設定為1,則每次事件會更新表 #預設為10000
sync_relay_log_info:控制relay_log_info資訊的更新操作
若relay_log_info_repository為FILE,當設定為0,交由OS重新整理磁碟,預設為10000次重新整理到磁碟;
若relay_log_info_repository為TABLE,且為INNODB儲存,則無論為任何值,則都每次evnet都會更新表。
master當機後無法及時恢復造成的資料丟失
當master出現故障後,binlog未及時傳到slave,或者各個slave收到的binlog不一致。且master無法在第一時間恢復,這個時候怎麼辦?
如果master不切換,則整個資料庫只能只讀,影響應用的執行。
如果將別的slave提升為新的master,那麼原master未來得及傳到slave的binlog的資料則會丟失,並且還涉及到下面2個問題。
1.各個slave之間接收到的binlog不一致,如果強制拉起一個slave,則slave之間資料會不一致。
2.原master恢復正常後,由於新的master日誌丟棄了部分原master的binlog日誌,這些多出來的binlog日誌怎麼處理,重新搭建環境?
對於上面出現的問題,一種方法是確保binlog傳到從庫,或者說保證主庫的binlog有多個複製。第二種方法就是允許資料丟失,制定一定的策略,保證最小化丟失資料。
1.確保binlog全部傳到從庫
方案一:使用semi sync(半同步)方式,事務提交後,必須要傳到slave,事務才能算結束。對效能影響很大,依賴網路適合小tps系統。
方案二:雙寫binlog,透過DBDR OS層的檔案系統複製到備機,或者使用共享盤儲存binlog日誌。
方案三:在資料層做文章,比如保證資料庫寫成功後,再非同步佇列的方式寫一份,部分業務可以藉助設計和資料流解決。
2.保證資料最小化丟失
上面的方案設計及架構比較複雜,如果能容忍資料的丟失,可以考慮使用淘寶的TMHA複製管理工具。
當master當機後,TMHA會選擇一個binlog接收最大的slave作為master。當原master當機恢復後,透過binlog的逆向應用,把原master上多執行的事務回退掉。
3.總結
透過上面的總結分析,MySQL丟資料的場景是五花八門,涉及到單庫的丟資料場景、主從的丟資料場景以及MySQL內部XA事務原理等,相對還比較複雜,有點難以理解。
只有當我們瞭解了這些丟資料的場景,才能更好的去學習, 並解決這些問題。
參考文件:
http://blog.itpub.net/25704976/viewspace-1318714/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-2123053/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 磁碟排序對Oracle資料庫效能的影響排序Oracle資料庫
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫
- 容器化對資料庫的效能有影響嗎?資料庫
- 變更OS時間對資料庫的影響資料庫
- 執行緒數目對資料庫的影響執行緒資料庫
- MySQL資料庫的效能的影響分析及其優化MySql資料庫優化
- 聊聊虛擬化和容器對資料庫的影響資料庫
- 修改系統時間對oracle資料庫的影響Oracle資料庫
- 關於資料庫開啟大頁對效能的影響資料庫
- mysql event對主從的影響MySql
- NVM作為主存上對資料庫管理系統的影響資料庫
- ORM框架和資料庫對系統效能影響的比較ORM框架資料庫
- 表資料的儲存對索引的影響索引
- 主庫resetlogs對備庫的影響
- 驗證資料壓縮對DML的影響
- SYSAUX表空間滿對資料庫的影響以及解決措施UX資料庫
- 不停機 data guard 注意事項 (重建orapw對資料庫的影響)資料庫
- 影響資料庫效能與穩定性的幾個重要引數資料庫
- 社交媒體合作對品牌參與度的影響–資料資訊圖
- MySQL alter 新增列對dml影響MySql
- InnoDB 隔離模式對 MySQL 效能的影響模式MySql
- OS和資料庫版本不同對RMAN備份還原的影響資料庫
- Oracle安裝過程對資料庫級語言設定的影響Oracle資料庫
- shrink 與rebuild對索引高度的影響對比Rebuild索引
- 大資料對法律行業產生的影響大資料行業
- iPad對各行業的影響–資料資訊圖iPad行業
- 【RAC】資料庫的靜默狀態(QUIESCE RESTRICTED)對RAC環境的影響資料庫UIREST
- 資料庫調優和資料遷移是如何影響資料庫的RY資料庫
- Cirium:資料揭示新冠肺炎對中國航空業的影響及對全球航空旅遊增長的影響
- nologging對備庫的影響
- mysql刪除和更新操作對效能的影響MySql
- 重啟mysql對於auto_increment的影響MySqlREM
- 資料列not null對索引影響一例Null索引
- 業務資料抓取的影響
- 產品資料管理對ERP系統的影響
- 大資料對我們生活中的影響有哪些?大資料
- 資料對於製造業的國際化影響
- Backup And Recovery User's Guide-使用閃回資料庫-監控閃回資料庫對效能的影響GUIIDE資料庫