在日常的工作中,有時(shí)候我們會(huì)遇到誤刪mysql數(shù)據(jù)庫(kù)中的數(shù)據(jù)的情況。這個(gè)時(shí)候我們需要知道如何通過(guò)備份和恢復(fù)的方式,將誤刪的數(shù)據(jù)恢復(fù)到原來(lái)的狀態(tài)。
1. 使用備份文件恢復(fù)數(shù)據(jù) 如果我們之前有備份數(shù)據(jù)的習(xí)慣,那么我們可以通過(guò)備份文件將誤刪的數(shù)據(jù)恢復(fù)回來(lái)。步驟如下: 1.1 打開(kāi)mysql控制臺(tái) 1.2 輸入以下命令連接到mysql數(shù)據(jù)庫(kù) mysql -u root -p 1.3 輸入密碼,進(jìn)入mysql命令行界面 1.4 停止mysql服務(wù) sudo /etc/init.d/mysql stop 1.5 進(jìn)入mysql數(shù)據(jù)目錄 cd /var/lib/mysql 1.6 備份原有的數(shù)據(jù) sudo cp -R data/ data_backup/ 1.7 還原備份的數(shù)據(jù) sudo cp -R data_backup/ data/ 1.8 重啟mysql服務(wù) sudo /etc/init.d/mysql start 1.9 輸入以下命令查看恢復(fù)后的數(shù)據(jù)是否正確 show databases;
2. 使用Undrop for InnoDB工具恢復(fù)數(shù)據(jù) 如果我們沒(méi)有備份,那么我們可以使用Undrop for InnoDB工具來(lái)恢復(fù)誤刪的數(shù)據(jù)。步驟如下: 2.1 下載并安裝Undrop for InnoDB工具 wget https://github.com/twindb/undrop-for-innodb/archive/master.zip unzip master.zip cd undrop-for-innodb-master make sudo make install 2.2 停止mysql服務(wù) sudo /etc/init.d/mysql stop 2.3 通過(guò)innodb_force_recovery選項(xiàng)啟動(dòng)mysql sudo mysqld_safe --skip-grant-tables --innodb_file_per_table --innodb_force_recovery=6 & 2.4 進(jìn)入mysql控制臺(tái) mysql -u root -p 2.5 輸入以下命令選擇要恢復(fù)的數(shù)據(jù)庫(kù) use database_name; 2.6 輸入以下命令查看需要恢復(fù)的表名 show tables; 2.7 輸入以下命令選擇需要恢復(fù)數(shù)據(jù)的表 select * from table_name; 2.8 拷貝恢復(fù)的數(shù)據(jù)到另一個(gè)數(shù)據(jù)庫(kù) create database new_database; use new_database; create table new_table like old_table; insert into new_table select * from old_table; 2.9 退出mysql控制臺(tái)后,停止mysql服務(wù) sudo /etc/init.d/mysql stop 2.10 修改mysql配置文件,去掉innodb_force_recovery選項(xiàng) sudo vi /etc/my.cnf 注釋掉innodb_force_recovery=6這行 2.11 啟動(dòng)mysql服務(wù) sudo /etc/init.d/mysql start 2.12 驗(yàn)證新的數(shù)據(jù)庫(kù)是否可以正常訪問(wèn) mysql -u root -p use new_database; show tables;
總之,我們一定要時(shí)刻保持備份數(shù)據(jù)的習(xí)慣。如果不小心誤刪了數(shù)據(jù),也不要著急,可以通過(guò)恢復(fù)備份或使用Undrop for InnoDB工具恢復(fù)數(shù)據(jù),最大限度地減少數(shù)據(jù)丟失的損失。