回覆列表
  • 1 # 愛可生雲資料庫

    資料備份是資料容災的最後一道防線,即便有著兩地三中心的架構,備份也依然重要。如果備份出問題,備份時影響了交易業務,備份資料無法恢復,這些也是企業難以承受的。所以選擇合適的備份工具尤為重要。

    每個企業級資料庫都會有配套的備份工具,MEB(MySQL Enterprise Backup)就是MySQL企業版中非常重要的工具之一,是為企業級客戶提供的資料備份方案。

    Xtrabackup一直作為MEB 開源版備胎而存在,從MySQL 8.0開始情況可能會變得有所不同。

    在 MySQL 8.0的Backup Lock、Redo Log Archiving、Page Tracking等新特性的加持下,MEB備份/恢復體驗會更好,目前xtrabackup還不支援這些特性。

    MySQL 企業版還有哪些功能?

    特性1:Backup Lock

    8.0之前使用xtrabackup或MEB做物理備份,為了保證備份時InnoDB引擎表與其他引擎資料檔案、及binlog日誌的一致性會上全域性讀鎖,再複製非InnoDB檔案,這期間MySQL會變成只讀,資料無法寫入。表數量越多,可能加上時間越長,如果使用的xtrabackup 不小心沒加rsync引數,逐個複製frm檔案,鎖定時間會更長,對業務影響較大。

    我曾遇到過部署在虛擬機器的例項有12000多張表,當時使用的xtrabackup,備份指令碼中沒加rsync引數,結果鎖了十幾分鍾,而MEB就沒有這樣的問題。

    MySQL 8.0支援輕量級備份鎖 LOCK INSTANCE FOR BACKUP,資料字典也重構了由InnoDB儲存。若不建立非InnoDB表,MEB預設使用備份鎖獲取binlog日誌一致性位置,並阻止DDL操作,但不影響DML操作。

    只有InnoDB表,僅上備份鎖

    若有非InnoDB表,上全域性鎖

    特性2:Redo Log Archiving

    MEB能做到線上熱備,備份時不影響資料庫讀寫,這是利用了InnoDB事務日誌,在備份期間持續監視redo log的變化,讀取增量變化,寫入到ibbackup_logfile,也就不需要上鎖來保障備份一致性。(對非InnoDB的檔案需要上讀鎖複製)

    如果備份期間資料庫寫入負載特別大,而寫入ibbackup_logfile速度較慢,redo log size也不大,很可能會出現ibbackup_logfile的寫入速度跟不上redo log記錄生成速度,redo log 空間不夠時需要覆寫日誌檔案,那麼來不及寫入ibbackup_logfile的記錄會丟失,導致備份失敗。

    MEB 4.1對此做了最佳化,將redo log處理執行緒拆分成多執行緒分工合作,提高處理redo log的效率,降低了redo log覆寫造成備份失敗的機率,但redo log新增速度和ibbackup_logfile寫入速度懸殊太大,問題依然會發生。

    MySQL 8.0.17支援了redo log archiving 徹底解決了此問題,備份前設定innodb_redo_log_archive_dirs,指定redo log歸檔目錄。MEB備份時自動開啟日誌歸檔,當checkpoint時會將舊記錄歸檔到此目錄,後續從歸檔檔案中讀取redo日誌記錄,避免了覆寫可能導致的redo記錄丟失。

    注意:innodb_redo_log_archive_dirs 不能在資料目錄下,目錄許可權要求是700

    特性3:Page Tracking

    Page Tracking 是為最佳化增量備份效率,減少不必要的資料頁掃描。

    增量備份當前有3種掃描模式:

    page-track:利用LSN精確跟蹤上次備份之後被修改頁面,僅複製這些頁面,效率最快。

    optimistic:掃描上次備份之後被修改的InnoDB 資料檔案中,找出並複製修改的頁面。依賴系統時間,使用存在限制。

    full-scan:掃描所有InnoDB資料檔案,找出並複製自上次備份之後修改的頁面,效率最慢

    1、利用page-track增量備份,需先安裝備份元件

    2、在全備前開啟page-track

    3、全備之後,做增量備份時指定若滿足page tracking條件,預設會使用page-track模式,否則會使用full-scan模式,也可以指定--incremental=page-track。

    incremental-base有3種選擇

    last_backup:基於前一次備份做增備,前一次備份可能是增備,也可能是全備。這種方式全備之間可能會有多個增備,每次增量可能比較小,但恢復時需要逐個合併。

    last_full_backup:基於前一次全備做增備。這種方式增備會越往後體積可能越大,但恢復時只需要合併最後一次增量備份。

    dir:基於前一次的備份目錄,前一次備份可能是增備,也可能是全備。

    測試對比full-scan 和page-track ,在變更頁小於總體50%的情況下 ,備份效率至少能有1倍的速度提升。

    page-track 模式 磁碟讀寫均衡,說明讀寫的都是修改頁面。

    full-scan模式 磁碟讀寫差別很大,說明讀了很多未修改的頁面。

  • 中秋節和大豐收的關聯?
  • 大江大河梁家背景?