作為一個PHP的程序員,用了好多年的mysql數據庫,一般的數據表我們要么用InnoDB的表類型(Engine)或MyISAM的表類型居多。在創建數據庫表的時候,默認是使用的表類型是InnoDB的,當時也沒太在意,反正不影響數據庫的使用,今天我們不講InnoDB和MyISAM的區別(在使用事務時,需要用到InnoDB表類型之類的),而是講下這兩種數據表的如何備份。
一般備份數據庫最簡單的方法就是使用phpmyadmin網頁來導出保存為sql文件數據庫或Navicat使用軟件將所有的數據表全選后另存為sql文件。除了兩種方法外,還能通過備份msyql安裝目錄里的data文件夾里的數據庫文件來備份數據庫,data路徑如下圖所示:

如果是表類型為MyISAM的數據庫則非常簡單,只需要將數據表文件夾(如上圖所示的”xianda”)復制到data的目錄里就可以使用這個數據庫了。現在重點講下如何快速恢復表類型為InnoDB的數據庫,根據我的經驗而言(可能還有其他的辦法),想要恢復InnoDB的數據庫有一個必要條件,那就是你必須同時備份了上圖所示的ibdata1的文件,否則將無法備份InnoDB數據表。例如上圖里的”sgccmindb”就是innoDB的數據庫,首先關閉mysql service,然后同時復制數據庫文件夾和ibdata1到data目錄里,如果data有其他數據庫,請先備份,否則ibdata1文件替換原先的ibdata1文件后,原先的數據庫可能會無法使用,特別是表類型innoDB的數據庫肯定無法使用。
以前遇到的問題:只復制數據庫,并沒有復制ibdata1文件,造成的情況如下圖所示:

從navicat軟件里可以查看到數據表的數據長度為0KB,并且表結構也是無法保存,如果雙擊打開數據表,會彈出錯誤如下圖所示:

即提示這個表是不存在的,從上面的兩個提示可以推斷,innoDB的數據庫是把所有的數據都保存在ibdata1文件了,而MyISAM的數據庫則直接把數據保存在表文件里的。
總結:如果使用表類型為innoDB的數據庫,在備份表文件的同時,必須把對應的ibdata1文件也備份了,不過還是建議備份sql文