1. 程式人生 > >快速備份和還原 MySQL 資料庫的另一種方法

快速備份和還原 MySQL 資料庫的另一種方法

一直使用 SQL Server 作為公司產品的資料庫來儲存系統資料,所以備份還原一直都不是問題,因為 SQL Server 的備份還原非常迅速和易用。但今年公司改變策略,使用起 MySQL 資料庫作為新產品的資料庫後,我們終於遇到了備份還原的大難題:我們需要把客戶的資料庫備份並還原到開發環境中。我們同時使用 HeidiSQL和 NaviCat for MySQL 作為資料庫管理工具,使用這類工具的匯出指令碼功能,把整個資料庫匯出為一個SQL檔案,然後在還原目標資料庫中執行該 SQL 檔案以完成還原動作。原理非常簡單,但一個3GB大小的資料庫,備份以及還原居然花費了70小時(無可否認我們的伺服器的確是有點慢)。這個速度無論讓人接受,也影響了客戶對我們服務效率的評價。

  經過分析發現,還源速度慢的主要原因是因為這類工具在執行 SQL 檔案的時候,總是把每一條SQL以一個事務的方式去執行。所以面對幾千萬的資料,就需要執行幾千萬次的 SQL 語句,效率更加可想而知。於是想到了 OBDB2DB 這一個資料庫轉換工具,通過這一個工具把 MySQL 的資料匯出為本地 SQLite 資料庫,帶回來後再將 SQLite 轉換為 MySQL 資料庫。由於 OBDB2DB 在進行資料轉換時採用了批量處理的方式,所以轉換速度相比原來的方式大大提高。

 


  OBDB2DB 的使用非常簡單,首先按下圖將原資料庫匯出為 SQLite 資料庫:

 

  經過短暫的等待之後,我們就可以得到一個 DataBase.DB 的 SQLite 資料庫檔案(檔名自定義)。把檔案帶回到開發環境後,我們使用相反的方法把 SQLite 還原到 MySQL 資料庫:

 


  帶回的資料庫,在我的 W540 筆記本上只需要十分鐘就還原成功了。在那臺老慢的伺服器上面還原,也減少至只需要 54 分鐘就還原成功!比原來的 70 小時提高了 N 十倍了。不過這個方法有一個缺點,因為是通過異構資料庫來進行資料備份和還原,所以檢視和儲存過程將不會被保留。不過我們的專案都沒有使用這兩樣東西,所以足夠使用了。最重要的是,老闆說我最近的工作效率提高了~