ITEEDU

15.2.8 . 备份和恢复InnoDB数据库

15.2.8.1. 强制恢复

15.2.8.2. 检查点

安全数据库管理的关键是定期做备份。

InnoDB热备份工具是一个在线备份工具,你可以用它来在InnoDB数据库运行之时备份你的InnoDB数据库。InnoDB热备份工具不要求你关闭数据库,并且它不设置任何锁定或干扰你 正常的数据库处理。InnoDB热备份工具是非免费(商业的)附加软件,它每年的证书费用是每台MySQL服务器运行的计算机€390。请参阅InnoDB热备份主页以获得更详细的信息以及屏幕截图。

如果你可以关闭你的MySQL服务器,你可以生成一个包含InnoDB用来管理它的表的所有文件的二进制备份。使用如下步骤:

1.    关闭MySQL服务器,确信它是无错误关闭。

2.  复制你所有数据文件(ibdata文件和.ibd文件)到一个安全的地方。 

3.   复制你所有ib_logfile文件到一个安全的地方。

4.    复制my.cnf配置文件或文件到一个安全的地方。

5.    为你InnoDB表复制.frm文件到一个安全的地方。

复制对InnoDB表起作用,所以你可以使用MySQL复制能力来在需要高可用性的数据库站点保有一份数据库的复制。

除了刚才描述的二进制备份,你也应该周期性地用mysqldump转储你的数据库。这么做的原因是,二进制文件可能被破坏而你没有注意到。转储的文件被存储成为人可读的文本文件,所以定点表的损坏 修复变得更容易。再者,因为形式更简单,严重数据损坏的机会就更小。mysqldump 也有一个--single-transaction选项,你可以用它来做一个一致的快照而不用把其它客户端排除在外面。

要能够从上述的二进制备份恢复InnoDB数据库到现在,你必须让二进制日志功能打开正在运行的MySQL服务器。 然后你可以应用二进制日志到备份数据库以实现point-in-time恢复:

mysqlbinlog yourhostname-bin.123 | mysql

要从MySQL服务器的崩溃恢复,唯一需要的是重新启动它。InnoDB自动检查日志并执行到现在的数据库前滚。InnoDB自动回滚在崩溃时 呈现的未提交的事务。在恢复过程中,mysqld显示如下一些输出:

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

如果数据库被损坏或磁盘出错,你必须从备份做恢复。在损坏的情况下,你首先应该找出一个没有被损坏的备份。恢复数据库备份之后,从二进制日志文件恢复。

在一些数据库损坏的情况下,仅仅转储,移除并重建一个或数个被破坏的表是足够的。你可以用CHECK TABLE SQL语句来检查表是否损坏,虽然CHECK TABLE正常地不检查每种可能的损坏,你可以使用innodb_tablespace_monitor来检查表空间文件内文件空间管理的完整性。

在一些情况下,明显地数据库损坏是因为操作系统损坏它自己的文件缓存,磁盘上的数据可能完好,最好是首先重启计算机。它可以消除那些显得是数据库页损坏的错误。