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 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
如果你的数据库变的损坏或者磁盘故障,
你必须使用备份来执行一个recovery.
在腐败的情况下,首先找到一个备份是不损坏的,
在恢复基础备份后,做一个基于时间点的恢复从binary log files 使用
mysqlbinlog和mysql 来恢复在备份后的改变
在某些数据库腐败的情况下,它是足够的只是转储,drop和重建创建一个或者一些腐败的表。
你可以使用CHECK TABLE SQL语句来检查一个表是否是腐败的,
虽然CHECK TABLE 自然的检测每种可能的腐败。
在某些情况下,明显的数据库页腐败实际上由于操作系统腐败它自己的文件cache,
数据在磁盘可能是好的。