以上結果表示,數據庫被刪除後,用備份後的數據庫成功的將數據恢復到了刪除前的狀態
2] 當數據庫被修改後的恢復方法
數據庫被修改,可能存在著多方面的原因,被入侵、以及相應程序存在Bug等等,這裡不作詳細介紹。這裡將只介紹在數據庫被修改後,如果恢復到被修改前狀態的方法。
具體和上面所述的“數據庫被刪除後的恢復方法”相類似。這裡,測試用數據庫接著使用剛剛在前面用過的test。這裡為了使剛剛接觸數據庫的朋友不至於理解混亂,我們再次登錄到MySQL服務器上確認一下剛剛建立的測試用的數據庫test的相關信息。
[root@CentOS ~]# mysql -u root -p ← 用root登錄到MySQL服務器 Enter passWord: ← 輸入MySQL的root用戶密碼 Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 14 to server version: 4.1.20 Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> show databases; ← 查看當前存在的數據庫 +-------------+ | Database | +-------------+ | mysql | | test | +------------+ 2 rows in set (0.00 sec) mysql> use test ← 連接到test數據庫 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; ← 查看test數據庫中存在的表 +-------------------+ | Tables_in_test | +-------------------+ | test | +-------------------+ 1 row in set (0.00 sec) MySQL> select * from test; ← 查看數據庫中的內容 +------+--------------------+ | num | name | +------+--------------------+ | 1 | Hello,CentOS| +------+--------------------+ 1 row in set (0.01 sec) mysql> exit ← 退出MySQL服務器 Bye
然後,我們再次運行數據庫備份腳本,將當前狀態的數據庫,再做一次備份。
[root@CentOS ~]# cd ← 回到腳本所在的root用戶的根目錄
[root@CentOS ~]# ./MySQL-backup.sh ← 運行腳本進行數據庫備份
接下來,我們再次登錄到MySQL服務器中,對測試用的數據庫test進行一些修改,以便於測試數據恢復能否成功。
[root@sample ~]# mysql -u root -p ← 用root登錄到MySQL服務器 Enter passWord: ← 輸入MySQL的root用戶密碼 Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 15 to server version: 4.1.20 Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> use test ← 連接到test數據庫 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update test set name='Shit,Windows'; ← 然後將test中表的值重新定義為“Shit,Windows”(原來為“Hello,CentOS”) Query OK, 1 row affected (0.07 sec) Rows matched: 1 Changed: 1 Warnings: 0 MySQL> select * from test; ← 確認test中的表被定義的值 +------+--------------------+ | num | name | +------+-------------------+ | 1 | Shit,Windows | ← 確認已經將原test數據庫表中的值修改為新的值“Shit,Windows” +------+-------------------+ 1 row in set (0.00 sec) mysql> exit ← 退出MySQL服務器 Bye
以上,我們就等於模擬了數據庫被篡改的過程。接下來,是數據庫被“篡改”後,用備份進行恢復的方法。
[root@CentOS ~]# /bin/cp -Rf /backup/mysql/test/ /var/lib/MySQL/ ← 復制備份的數據庫test到相應目錄
然後,再次登錄到MySQL服務器上,看數據庫是否被恢復到了被“篡改”之前的狀態。
[root@CentOS ~]# mysql -u root -p ← 用root登錄到MySQL服務器 Enter passWord: ← 輸入MySQL的root用戶密碼 Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 16 to server version: 4.1.20 Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> use test ← 連接到test數據庫 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MySQL> select * from test; ← 查看數據庫中的內容 +------+----------------+ | num | name | +------+----------------+ | 1| Hello,CentOS | ← 確認數據表中的內容與被修改前定義的“Hello,CentOS”一樣! +------+----------------+ 1 row in set (0.01 sec) mysql> exit ← 退出MySQL服務器 Bye
以上結果表示,數據庫被修改後,用備份後的數據庫成功的將數據恢復到了被“篡改”前的狀態。
測試後…
測試完成後,將測試用過的遺留信息刪除。
[root@CentOS ~]# mysql -u root -p ← 用root登錄到MySQL服務器 Enter passWord: ← 輸入MySQL的root用戶密碼 Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 19 to server version: 4.1.20 Type 'help;' or 'h' for help. Type 'c' to clear the buffer. mysql> use test ← 連接到test數據庫 Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> drop table test; ← 刪除test數據庫中的表 Query OK, 0 rows affected (0.01 sec) mysql> drop database test; ← 刪除測試用數據庫test Query OK, 0 rows affected (0.00 sec) mysql> show databases; ← 查看當前存在的數據庫 +-------------+ | Database | +-------------+ | MySQL | ← 確認測試用數據庫test不存在、已被刪除 +-------------+ 1 row in set (0.00 sec) mysql> exit ← 退出MySQL服務器 Bye
以上介紹了用我們自己建立的一段Shell腳本,通過MySQLhotcopy來備份數據庫的方法。
對於許多個人愛好者來說,組建服務器可能不是很考慮數據被破壞以及數據被破壞後的恢復工作。但不能不說,對於服務器來說,數據破壞後的恢復效率也是 區 別業余和專業的因素之一。所以筆者建議,在您配置好了Web服務器以及MySQL服務器等等的時候,千萬不要急於應用它,而要想辦法在有限的(硬件、軟 件)條件下使它“堅不可摧”之後,再考慮應用的問題。