由於MySQL資料庫通常儲存著應用的核心資料,資料備份與恢複功能是必不可少的,大多數成熟的資料庫管理系統都提供高效能的線上資料備份與定點(Point-in-time)恢複功能。但作為最流行的開來源資料庫產品,MySQL在這方面的功能是比較弱的,即使與另一個知名開來源資料庫PostgreSQL相比也遠遠不足。一直以來,MySQL只提供一個mysqldump工具來進行資料備份。這是個與資料庫核心完全獨立外圍工具,簡單說起來就是對要備份的表執行"SELECT *"語句,選出每條記錄然後儲存成INSERT語句或CSV格式。這種方式容易實現但顯然效能不佳,尤其是恢複時需要匯入資料,如果有大量資料將是一個非常慢的過程,一但發生故障,系統將長時間不能提供服務。不過,等到今年底MySQL 6.0發布之後(我估計會跳票),這一現象將完全改觀。
MySQL 6.0中將計劃引入全新的線上備份與恢複功能,屆時備份與恢複功能將由各儲存引擎提供的本地驅動(Native Driver)提供。各儲存引擎可以以最方便高效的形式提供資料備份功能,前提是備份所得資料要對應於某個時間點資料庫的一致狀態(即備份包含且只包含當時所有已經提交事務(對於非事務儲存引擎是所有已經完成的操作)修改的資料。這一時間點有兩種選擇,可以是備份剛開始的時間,也可以是備份剛剛結束時的時間。一個備份可能涉及到多個儲存引擎(這也是MySQL實現線上備份功能的痛點,目前MySQL備份功能不佳估計就與MySQL支援多個儲存引擎的特性的關),但只要每個儲存引擎都能提供對應於備份剛開始或剛結束時的一致資料,MySQL就能保證備份資料的全域一致性。這一點容易做到,MySQL會要求那些提供備份結束點一致性資料的儲存引擎先進行備份,等到這些儲存引擎備份完成後,再短暫的停止資料庫寫操作,然後啟動那些提供備份起始點一致性資料的儲存引擎的備份過程。
這樣,MySQL上層只是把各個儲存引擎備份的資料打個包(同時也提供備份資料壓縮和加密功能),最關鍵的就是各儲存引擎本地驅動的實現。由於備份與恢複功能由本地驅動提供,理論上可以提供比mysqldump好得多的備份與恢複效能,並且實現聯機備份。以MyISAM儲存引擎為例,原來要想對MyISAM類型的表作一個一致性備份,就並且鎖定這個表,備份期間不能進行寫操作,影響到系統服務。在將來的MySQL 6.0中,據開發人員的設想,MyISAM儲存引擎的本地驅動將按如下方式進行資料備份:啟動備份後,開啟日誌記錄功能,記錄備份過程中對被備份表的資料修改操作,然後拷貝.MYD和.MYI檔案,最後拷貝備份期間的日誌。這樣備份將由.MYD/MYI檔案和備份期間的更新日誌構成,恢複時先恢複資料,再回放這些日誌,就能將資料恢複到備份剛結束時的狀態。並且由於這些日誌是由MyISAM本地驅動提供的物理日誌,不是邏輯的binlog,恢複效能會有很大提高。