1. 程式人生 > >【MySQL技術內幕】61-熱備份

【MySQL技術內幕】61-熱備份

1、ibbackup

ibbackup是 InnoDB儲存引擎官方提供的熱備工具,可以同時備份 MyISAM儲存引擎和 InnoDB儲存引擎表。對於 InnoDB儲存引擎表其備份工作原理如下:

  1. 記錄備份開始時, InnoDB儲存引擎重做日誌檔案檢查點的LSN。
  2. 複製共享表空間檔案以及獨立表空間檔案。
  3. 記錄複製完表空間檔案後, InnoDB儲存引擎重做日誌檔案檢查點的LSN
  4. 複製在備份時產生的重做日誌。

對於事務的資料庫,如 Microsoft SQL Server資料庫和 Oracle資料庫,熱備的原理大致和上述相同。可以發現,在備份期間不會對資料庫本身有任何影響,所做的操作只是複製資料庫檔案,因此任何對資料庫的操作都是允許的,不會阻塞任何操作。故ibbackup的優點如下:

  • 線上備份,不阻塞任何的SQL語句。
  • 備份效能好,備份的實質是複製資料庫檔案和重做日誌檔案。
  • 支援壓縮備份,通過選項,可以支援不同級別的壓縮。
  • 跨平臺支援, backup可以執行在 Linux、 Windows以及主流的UNX系統平臺上。

ibbackup對 InnoDB儲存引擎表的恢復步驟為:

  • 恢復表空間檔案。
  • 應用重做日誌檔案。

backup提供了一種高效能的熱備方式,是 InnoDB儲存引擎備份的首選方式。不過它是收費軟體,並非免費的軟體。好在開源的魅力就在於社群的力量, Percona公司給使用者帶來了開源、免費的 XtraBackup熱備工具,它實現所有 backup的功能,並且擴充套件支援了真正的增量備份功能。因此,更好的選擇是使用 Xtra Backup來完成熱備的工作。

2、XtraBackup

XtraBackup備份工具是由 Percona公司開發的開源熱備工具。支援 MySQL5.0以上的版本。 XtraBackup在GPLv2開源下發布,官網地址是:htps://launchpad.net/percona-xtrabackup。 xtrabackup命令的使用方法如下: xtrabackup --backup | prepare [OPTIONS] xtrabackup命令的可選引數如下:

如果使用者要做一個完全備份,可以執行如下命令:

可以看到在開始備份時, xtrabackup首先記錄了重做日誌的位置,在上述示例中為(0 1009910580)。然後對備份的 InnoDB儲存引擎表的物理檔案,即共享表空間和獨立表空間進行copy操作,這裡可以看到輸出有 Copying…to…。最後記錄備份完成後的重做日誌位置(0 1014592707)。

3、XtraBackup實現增量備份

MysαL資料庫本身提供的工具並不支援真正的增量備份,更準確地說,二進位制日誌的恢復應該是 point-in-time的恢復而不是增量備份。而 XtraBackup工具支援對於InnoDB儲存引擎的增量備份,其工作原理如下:

  1. 首選完成一個全備,並記錄下此時檢查點的LSN。
  2. 在進行增量備份時,比較表空間中每個頁的LSN是否大於上次備份時的LSN,如果是,則備份該頁,同時記錄當前檢查點的LSN。

因此 XtraBackup的備份和恢復的過程大致如下:

在上述過程中,首先將全部檔案備份到/backup/base目錄下,增量備份產生的檔案備份到/backup/delta。在恢復過程中,首先指定全備的路徑,然後將增量的備份應用於該完全備份。以下顯示了一個完整的增量備份過程: