7.3 备份和恢复策略示例

本节讨论执行备份的过程,该过程使您能够在几种类型的崩溃后恢复数据:

  • os 崩溃

  • Power failure

  • 文件系统崩溃

  • 硬件问题(硬盘驱动器,主板等)

示例命令不包含mysqldumpmysqlClient 端程序的选项,例如--user--password。您应包括必要的选项,以使 Client 端程序能够连接到 MySQL 服务器。

假设数据存储在InnoDB存储引擎中,该引擎支持事务和自动故障恢复。还假定崩溃时 MySQL 服务器正在加载。如果不是这样,将永远不需要恢复。

对于 os 崩溃或电源故障的情况,我们可以假定重启后 MySQL 的磁盘数据可用。由于崩溃,InnoDB数据文件可能不包含一致的数据,但是InnoDB读取其日志并在其中查找尚未刷新到数据文件的未决已提交和未提交事务的列 table。 InnoDB自动回退那些未提交的事务,并将那些已提交的数据刷新到其数据文件中。有关此恢复过程的信息将通过 MySQL 错误日志传达给用户。以下是示例日志摘录:

InnoDB: Database was not shut down normally.
InnoDB: Starting recovery from log files...
InnoDB: Starting log scan based on checkpoint at
InnoDB: log sequence number 0 13674004
InnoDB: Doing recovery: scanned up to log sequence number 0 13739520
InnoDB: Doing recovery: scanned up to log sequence number 0 13805056
InnoDB: Doing recovery: scanned up to log sequence number 0 13870592
InnoDB: Doing recovery: scanned up to log sequence number 0 13936128
...
InnoDB: Doing recovery: scanned up to log sequence number 0 20555264
InnoDB: Doing recovery: scanned up to log sequence number 0 20620800
InnoDB: Doing recovery: scanned up to log sequence number 0 20664692
InnoDB: 1 uncommitted transaction(s) which must be rolled back
InnoDB: Starting rollback of uncommitted transactions
InnoDB: Rolling back trx no 16745
InnoDB: Rolling back of trx no 16745 completed
InnoDB: Rollback of uncommitted transactions completed
InnoDB: Starting an apply batch of log records to the database...
InnoDB: Apply batch completed
InnoDB: Started
mysqld: ready for connections

对于文件系统崩溃或硬件问题,我们可以假定重启后 MySQL 磁盘数据*不可用。这意味着 MySQL 无法成功启动,因为某些磁盘数据块不再可读。在这种情况下,有必要重新格式化磁盘,安装新磁盘或以其他方式纠正潜在问题。然后有必要从备份中恢复我们的 MySQL 数据,这意味着必须已经进行了备份。为确保这种情况,请设计并实施备份策略。