因為磁碟空間不足,我的一個虛擬機器伺服器崩潰了。結果資料庫伺服器程序無法啟動,資料也就無法匯出。只能想辦法從資料庫原始檔案 ibdata 和 frm 檔案中恢復資料庫。因為沒有經驗,好不容易才找到了恢復方法。特此記錄,以備後用。磁碟空間不足之後,mysqld 程序無法啟動,提示“Can"t connect to local MySQL server through socket "/var/lib/mysql/mysql.sock" (2)”。這真是讓人無比頭大,資料庫根本連線不上。目錄 Contents1. 儲存原始資料庫檔案2. 恢復方法3. 參考資料:1. 儲存原始資料庫檔案¶好在資料庫原始檔案還在。在我的系統環境和配置情況下,這些檔案位於 /var/lib/mysql/ 資料夾下面。假設資料庫名是 test,則這些檔案表現為:--mysql|--test|--1.frm|--2.frm|...|--mysql|...|--ib_logfile0|--ib_logfile1|--ibdata1|...這些就是原始資料庫檔案,可以用來恢復資料庫。將這些檔案額外儲存一份,以防萬一。2. 恢復方法¶我的原始虛擬機器完全沒有磁碟空間而無法啟動資料庫伺服器程序。雖然試著刪除一些不需要的檔案,但是資料庫卻始終無法連線。於是我新建了一個幾乎一樣的虛擬機器(當然磁碟加大了),試圖將這些資料庫檔案匯入並恢復資料庫。在經歷了很多錯誤之後,終於找到了正確的方法:安裝完成新伺服器之後,透過命令列新建了與原來一樣的資料庫:資料庫名稱、使用者名稱、密碼都一樣。如果有多個數據庫需要恢復,就都給建好。(跟配置新伺服器一樣,參見安裝和配置 MYSQL 資料庫伺服器。)停止 mysqld 程序service mysqld stop將備份的原始資料庫檔案中的所有 .frm 檔案(保持原來的目錄結構)和 ibdata1 檔案複製到新伺服器的資料庫檔案目錄中(如果新伺服器作業系統和配置環境一樣,那麼目錄結構也一樣),其它檔案不要。使用 -innodb_force_recovery=6引數啟動資料庫伺服器程序,這裡是/etc/init.d/mysqld start -defaults-file=/etc/my.cnf -standalone -console -innodb_force_recovery=6OK,資料庫恢復完成。
因為磁碟空間不足,我的一個虛擬機器伺服器崩潰了。結果資料庫伺服器程序無法啟動,資料也就無法匯出。只能想辦法從資料庫原始檔案 ibdata 和 frm 檔案中恢復資料庫。因為沒有經驗,好不容易才找到了恢復方法。特此記錄,以備後用。磁碟空間不足之後,mysqld 程序無法啟動,提示“Can"t connect to local MySQL server through socket "/var/lib/mysql/mysql.sock" (2)”。這真是讓人無比頭大,資料庫根本連線不上。目錄 Contents1. 儲存原始資料庫檔案2. 恢復方法3. 參考資料:1. 儲存原始資料庫檔案¶好在資料庫原始檔案還在。在我的系統環境和配置情況下,這些檔案位於 /var/lib/mysql/ 資料夾下面。假設資料庫名是 test,則這些檔案表現為:--mysql|--test|--1.frm|--2.frm|...|--mysql|...|--ib_logfile0|--ib_logfile1|--ibdata1|...這些就是原始資料庫檔案,可以用來恢復資料庫。將這些檔案額外儲存一份,以防萬一。2. 恢復方法¶我的原始虛擬機器完全沒有磁碟空間而無法啟動資料庫伺服器程序。雖然試著刪除一些不需要的檔案,但是資料庫卻始終無法連線。於是我新建了一個幾乎一樣的虛擬機器(當然磁碟加大了),試圖將這些資料庫檔案匯入並恢復資料庫。在經歷了很多錯誤之後,終於找到了正確的方法:安裝完成新伺服器之後,透過命令列新建了與原來一樣的資料庫:資料庫名稱、使用者名稱、密碼都一樣。如果有多個數據庫需要恢復,就都給建好。(跟配置新伺服器一樣,參見安裝和配置 MYSQL 資料庫伺服器。)停止 mysqld 程序service mysqld stop將備份的原始資料庫檔案中的所有 .frm 檔案(保持原來的目錄結構)和 ibdata1 檔案複製到新伺服器的資料庫檔案目錄中(如果新伺服器作業系統和配置環境一樣,那麼目錄結構也一樣),其它檔案不要。使用 -innodb_force_recovery=6引數啟動資料庫伺服器程序,這裡是/etc/init.d/mysqld start -defaults-file=/etc/my.cnf -standalone -console -innodb_force_recovery=6OK,資料庫恢復完成。