官术网_书友最值得收藏!

6.4 恢復數據庫

上一節介紹了如何備份數據庫,在數據庫中的數據遭到破壞,例如,如果服務器由于斷電而突然停機造成數據丟失等,這時需要使用恢復技術來恢復數據。

恢復數據庫的過程使用兩個信息源:備份文件和更新日志。其中,備份文件將表恢復到進行該備份時的狀態。另外,在備份和故障發生這段時間中,表通常已經被修改。更新日志包含了用來完成這些修改的命令。可以通過將更新日志輸入mysql的方法來重復這些查詢命令,徹底恢復數據。

6.4.1 恢復整個數據庫

首先來看如何恢復整個數據庫,步驟如下。

(1)將原數據庫目錄的內容拷貝到其他的地方。

保存遭到破壞后的數據,可以用來進行數據破壞的原因分析。

(2)用最新的備份文件重新加載數據庫:

● 如果使用由mysqldump備份的文件,則需要將它們作為mysql的輸入;

● 如果使用從數據庫中直接拷貝的文件,則將它們直接拷貝回到該數據庫目錄中。在這種情況下,應該在拷貝這些文件之前關閉服務器,在拷貝結束后再重新啟動。

(3)用更新日志重做在進行數據備份后又修改了的數據。

對于所有可用的更新日志,可使用它作為mysql的輸入。指定--one-database選項,使mysql只對想要恢復的數據庫執行查詢命令。

例如,如果自備份以來所產生的日志命名為update.001、update.002,等等,可以重新運行它們中的命令:

    % mysql --one-database db_name<update.001
    % mysql --one-database db_name<update.002

如果正在運行恢復,應確保先從更新日志中刪除引起數據丟失的操作語句:DROP DATABASE、DROP TABLE或DELETE等。

★ 注意 ★

如果要恢復的數據庫是含有授權表的MySQL數據庫,則需要使用--skip-grant-tables選項啟動服務器。否則,服務器將提示無法找到授權表。在恢復表之后,執行如下命令:

% mysqladmin flush-privileges

來告訴服務器加載授權表,并用它們啟動。

6.4.2 恢復單個的表

相對于恢復整個數據庫來說,恢復單個表更加困難。如果有通過mysqldump生成的備份文件,并且它恰好包含想要恢復的表數據,則需抽取相關的行并用它們作為mysql的輸入,這需要了解SQL語句,實際上也不是特別困難的。

更為困難的是抽取應用于該表的更新日志的片段,這時可以使用mysql_find_rows實用程序,它可以從更新日志中抽取多行查詢。

另一種方法是用另一個MySQL服務器恢復整個數據庫,然后將所需要恢復的部分表數據文件拷貝到原始數據庫中。

主站蜘蛛池模板: 文山县| 博乐市| 盱眙县| 和政县| 黄石市| 城步| 交口县| 双鸭山市| 乌拉特前旗| 华亭县| 佛学| 房山区| 乌拉特后旗| 绥化市| 托克托县| 新民市| 遂平县| 诸暨市| 石柱| 阜康市| 礼泉县| 庆阳市| 郴州市| 鸡西市| 大化| 梅州市| 霍林郭勒市| 马龙县| 麻城市| 塘沽区| 江孜县| 莆田市| 区。| 远安县| 金昌市| 衡山县| 永年县| 莱阳市| 筠连县| 乾安县| 唐河县|