14.18 InnoDB Backup and Recovery 备份和恢复:安全数据库管理的关键是 做定期的备份,依赖你的数据卷,MySQL server的数量和数据库的负载,你可以使用那些技术,单独的或者组合:使用MySQL 企业版进行热备份; 当关闭Mysql 数据库的时候通过拷贝文件进行冷备份,物理备份对于快速操作(特别对于恢复)逻辑备份对于小的数据量或者恢复schema对象的结构Hot Backups mysqlbackup 命令, MySQL 企业备份组件部分,让你备份运行的MySQL 实例, 包含InnoDB和MyISAM 表,以最小的中断操作来产生一个一致性数据库快照。当mysqlbackup 是复制InnoDB 表,读和写在InnoDB和MyISAM 表是可以继续的。在复制MyISAM表的时候,读(但是不是写) 到那些表是允许的。MySQL 企业备份可以创建压缩的备份文件,备份表和数据库的子集。和MySQL的binary log的组合,用户可以执行按时间点恢复。MySQL Enterprise Backup 是MySQL Enterprise的一部分Cold Backups 冷备份:如果你可以关闭你的MySQL server, 你可以做一个binary backup 所有的文件用于管理它的表,使用下面的过程:1. 做一个慢的MySQL server 关闭和确保它停止没有报错2.复制所有的InnoDB 数据文件(ibdata文件和.ibd文件)到一个安全的地方3.复制所有的.frm 文件对于InnoDB 表到安全的地方4.复制所有的InnoDB log files(ib_logfile files)到一个安全的地方5.复制你的my.cnf 配置文件或者文件到安全的地方选择备份类型:除了前面描述的2进制备份, 使用mysqldump 定期的进行dump.一个binary 文件可能会损坏在你没有注意的时候Dumped tables 是存储在文本文件,它们是人可读的,因此发现表腐败变的很容易。此外,由于格式更简单,严重的数据损坏的机会会更小。mysqldump 也可以有一个 --single-transaction option来做一个一致性快照在不锁定其他的客户端复制工作,你可以使用MySQL 复制功能来保留你的数据库的拷贝Performing Recovery恢复你的InnoDB 数据库到现在从2进制备份的时间点,你必须让你的MySQL server 的binary logging 打开,甚至在备份前。为了完成基于时间点的恢复在恢复一个备份,你可以应用binary log的改变 在备份完成之后为了从一个MySQL server的crash 恢复, 唯一的需求时重启它。InnoDB 会自动的检查logs和执行一个数据库的前滚到现在InnoDB 自动回滚没有提交的事务, 在crash时在recovery期间,mysqld 显示输出这样的东西:InnoDB: Database was not shut down normally.InnoDB: Starting recovery from log files...InnoDB: Starting log scan based on checkpoint atInnoDB: log sequence number 0 13674004InnoDB: Doing recovery: scanned up to log sequence number 0 13739520InnoDB: Doing recovery: scanned up to log sequence number 0 13805056InnoDB: Doing recovery: scanned up to log sequence number 0 13870592InnoDB: Doing recovery: scanned up to log sequence number 0 13936128...InnoDB: Doing recovery: scanned up to log sequence number 0 20555264InnoDB: Doing recovery: scanned up to log sequence number 0 20620800InnoDB: Doing recovery: scanned up to log sequence number 0 20664692InnoDB: 1 uncommitted transaction(s) which must be rolled backInnoDB: Starting rollback of uncommitted transactionsInnoDB: Rolling back trx no 16745InnoDB: Rolling back of trx no 16745 completedInnoDB: Rollback of uncommitted transactions completedInnoDB: Starting an apply batch of log records to the database...InnoDB: Apply batch completedInnoDB: Startedmysqld: ready for connections如果你的数据库变的损坏或者磁盘故障,你必须使用备份来执行一个recovery.在腐败的情况下,首先找到一个备份是不损坏的,在恢复基础备份后,做一个基于时间点的恢复从binary log files 使用mysqlbinlog和mysql 来恢复在备份后的改变在某些数据库腐败的情况下,它是足够的只是转储,drop和重建创建一个或者一些腐败的表。你可以使用CHECK TABLE SQL语句来检查一个表是否是腐败的,虽然CHECK TABLE 自然的检测每种可能的腐败。在某些情况下,明显的数据库页腐败实际上由于操作系统腐败它自己的文件cache,数据在磁盘可能是好的。