恢復過程包括兩個信息源---備份文件和二進制日志,備份文件可使用數據恢復到執行備份時的狀態,而二進制日志可恢復到發生故障時的狀態。下面分別介紹如何利用這兩個文件恢復一個數據庫或恢復單個數據表。
恢復整個數據庫的步驟:
把需恢復的數據庫的整個目錄的內容拷貝到其它地方,以備用。
使用最近的備份文件重載數據庫。如果使用mysqldump生成的備份,則可使用它們作為MySQL的輸入重載;如果是通過拷貝數據庫目錄來備份的,則要關閉數據庫服務器,再把備份重新拷貝到數據目錄,再重啟數據庫服務器。
通過二進制日志重做事務,恢復到出錯點的數據。具體操作是這樣的,用mysqlbinlog把日志轉換成ASCII格式,再把它作為mysql的輸入,並指定--one-database選項,以便MySQL只執行你指定的數據庫恢復。如:
% ls -t -r -l binlog.[0-9]* | xargs mysqlbinlog | MySQL --one-database db_name
但上面命令只適合所有日志文件名具有相同長度的情況。否則需用下面的Perl代碼來處理:
#!/usr/bin/perl -w
# sort_num.pl
use strict;
my @files = <>; #read all input file
@files = sort { my $anum = $1 if $a =~/.(d+)$/; #sort them by numeric extension
my $bnum = $1 if $b =~/.(d+)$/;
$anum <=> $bnum;
} @files;
print @files; #print them
exit(0);