现在,假设我们在星期三早上 8 点发生灾难性的意外退出,需要从备份中恢复。要恢复,首先我们恢复我们拥有的最后一个完整备份(周日下午 1 点的备份)。全量备份文件只是一组SQL语句,恢复起来非常简单:
$> mysql < backup_sunday_1_PM.sql
此时,数据恢复到周日下午 1 点的状态。要恢复此后所做的更改,我们必须使用增量备份;即,
gbichot2-bin.000007
和
gbichot2-bin.000008
二进制日志文件。如有必要,从备份文件的位置获取文件,然后像这样处理它们的内容:
$> mysqlbinlog gbichot2-bin.000007 gbichot2-bin.000008 | mysql
我们现在已经将数据恢复到周二下午 1 点的状态,但仍然缺少从该日期到崩溃日期的更改。为了不丢失它们,我们需要让 MySQL 服务器将其 MySQL 二进制日志存储到一个安全位置(RAID 磁盘、SAN 等),而不是存储其数据文件的位置,这样这些日志就不会丢失在损坏的磁盘上。(也就是说,我们可以使用一个
--log-bin
选项来启动服务器,该选项指定与数据目录所在的物理设备不同的物理设备上的位置。这样,即使包含该目录的设备丢失,日志也是安全的。)如果我们已经这样做了,我们会有gbichot2-bin.000009
手头的文件(以及任何后续文件),我们可以使用mysqlbinlog和
mysql应用它们来恢复最近的数据更改,而不会丢失到崩溃的那一刻:
$> mysqlbinlog gbichot2-bin.000009 ... | mysql
有关使用mysqlbinlog 处理二进制日志文件的更多信息,请参阅 第 7.5 节,“时间点(增量)恢复”。