mysql之MyISAM和InnoDB的备份及恢复策略
MyISAM/InnoDB 备份策略
因为在一个数据库中有可能要同时使用MyISAM和InnoDB两种引擎,因此统一考虑他们的备份/恢复策略。
1、 完整备份采用mysqldump。
2、 增量备份采用bin-log日志。
先执行FLUSH LOGS刷新日志,同步日志缓存到磁盘,关闭当前的日志并产生新的日志文件。
然后拷贝上一次完整备份到一个安全的地方。
注意:对于 Innodb 类型表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。
3、 单表备份采用select into。
InnoDB 表恢复方法
1、 先尝试使用InnoDB的日志自动恢复功能,方法是重启mysql服务。
2、 在一些情况下,明显地数据库损坏是因为操作系统损坏它自己的文件缓存,磁盘上的数据可能完好,最好是首先重启计算机。它可以消除那些显得是数据库页损坏的错误。
如果不行,则采用下面的方法进行恢复。
3、 如果是mysqldump做的完全备份,先恢复完全备份,然后再恢复完全备份后的增量日志备份。
4、 如果是采用select into备份表的话,则采用load data或mysqlimport恢复。
5、 如果是采用二进制冷备份做的完全备份,则先停止mysql服务,覆盖备份的二进制文件,然后执行上次完全备份后的增量日志备份。
6、 注意:InnoDB二进制文件没有MyISAM那么好,必须在相同的浮点数的cpu机器上移植。
MyISAM 表恢复
1、 如果是通过mysqldump备份的,就执行:mysql –u root < 备份文件名。
2、 如果通过mysqlhotcopy或文件冷/热拷贝来备份的,停止mysql服务,使用备份文件来覆盖现有文件。
3、 如果是采用BACKUP TABLE备份的,使用restore table来恢复。因为backup table不会备份索引文件,恢复表注意重建索引。
4、 如果是采用SELECT INTO ...OUTFILE备份的,使用load data恢复数据,也可以使用mysqlimport命令来代替。
使用日志恢复
可以通过mysqlbinlog工具可以恢复二进制日志,可以一次恢复多个日志文件,命令如下:
shell> mysqlbinlog [options] hostname-bin.[0-9]* | mysql
mysqlbinlog命令使用方法见相关文章。
备份策略注意点:
1、一定用--log-bin或甚至--log-bin=log_name选项运行MySQL服务器,其中日志文件名位于某个安全媒介上,不同于数据目录所在驱动器。
如果你有这样的安全媒介,最好进行硬盘负载均衡(这样能够提高性能)。
2、定期进行完全备份,使用mysqldump命令进行在线非块备份。
在负载比较低的时候进行,并且建议采用--single-transaction参数来保证事务数据的一致性,同时不影响其他用户的正常读写。
3、完整备份时采用FLUSH LOGS,便于产生增量备份日志。
4、用FLUSH LOGS或mysqladmin flush-logs 刷新日志进行定期增量备份。
5、定期维护表,这样既可以提高性能,并且可以减少数据丢失和出错的可能性。
6、关键表可以另外再做备份,根据需要。