【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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 變更OS時間對資料庫的影響資料庫
- 容器化對資料庫的效能有影響嗎?資料庫
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫
- 聊聊虛擬化和容器對資料庫的影響資料庫
- 關於資料庫開啟大頁對效能的影響資料庫
- NVM作為主存上對資料庫管理系統的影響資料庫
- MySQL alter 新增列對dml影響MySql
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 六、python讀mysql資料庫資料庫MySqlPython
- 資料庫調優和資料遷移是如何影響資料庫的RY資料庫
- 資料庫的統計(select)確實會影響資料庫的更新(update)的資料庫
- 產品資料管理對ERP系統的影響
- MYSQL CPU部分單核佔滿會影響建立資料庫連線效率?MySql單核資料庫
- 網線的分類與對網速的影響 網線對網速影響大嗎?
- 大資料對我們生活中的影響有哪些?大資料
- oracle Mysql PostgreSQL 資料庫的對比OracleMySql資料庫
- Cirium:資料揭示新冠肺炎對中國航空業的影響及對全球航空旅遊增長的影響
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 四、python讀mysql寫入達夢資料庫資料庫MySqlPython
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 五、python讀mysql寫入金倉資料庫資料庫MySqlPython
- mysql事務對效率的影響分析總結JILEMySql
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- 16、MySQL Case-索引key對select count(*)的影響MySql索引
- MySQL資料庫遷移與MySQL資料庫批量恢復MySql資料庫
- MySQL 資料庫的對庫的操作及其資料型別悔鋒MySql資料庫資料型別
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 七、python讀oceanBase資料庫資料庫MySqlPython
- 專案資料視覺化對甲方客戶的影響視覺化
- Alter修改表結構對資料儲存的影響PP
- 聊聊分散式資料庫中單節點故障的影響分散式資料庫
- MySQL資料庫5:Go與MySQL的互動MySql資料庫Go
- Git 分支策略與submodule對分支策略的影響Git
- 業務資料抓取的影響
- 是什麼影響了資料庫索引選型?資料庫索引
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 九、python讀金倉資料庫資料庫MySqlPython
- 國產資料庫oceanBbase,達夢,金倉與mysql資料庫的效能對比 八、python讀達夢資料庫資料庫MySqlPython
- “一般資料保護條例”對資料分析及挖掘的影響
- MYSQL資料庫與Emoji表情的故事MySql資料庫
- mysql的DDL操作對業務產生影響測試MySql
- 資料庫產品影響力指數釋出,CirroData分散式資料庫上榜!資料庫分散式
- 資料保護法規更新對企業的深遠影響
- 表資料量影響MySQL索引選擇MySql索引