简短的问题:
在使用 InnoDB 引擎创建 MySQL 安装的定制备份时跳过 ib_logfile* 文件是否安全?
定制备份只是将所有(或部分)/var/lib/mysql + /etc/my.cnf 复制到安全的地方。
据我所知,ib_logfile* 文件是由 MySQL 在启动时重新创建的 + 这些文件非常大,因此将它们存储在备份中可能不明智。是的,假设 MySQL 在备份之前(正确地)停止了。
以您描述的方式备份数据库是不安全的。
原因是您无法知道某些数据页是否仍在 MySQL 服务器的内存中,等待 I/O 刷新到磁盘。因此,无论您是否包含ib_log
文件,复制文件都有很大的机会复制垃圾。
不要做你正在做的事情。使用mysqlbackup
或 InnoDB 的Hot Backup产品。
编辑:
阅读 Farhan Mashraqi 的关于InnoDB 性能优化的博客文章,他说如果你关闭了 MySQL 服务器ib_log
,你可以删除这些文件。
InnoDB 日志调整大小:并不像更改选项和重新启动那么简单。您需要关闭 MySQL 服务器并确保它正常关闭(检查错误日志以确认错误)。然后移走 InnoDB 日志文件 ib_log*。然后启动 MySQL 服务器并检查错误日志文件,看看它是否成功创建了新的日志文件。
所以是的,您应该只能对文件进行文件系统副本ibdata
。您不需要包含这些ib_log
文件,因为它们应该在 MySQL 服务器启动时重新创建。但是,我重申,我不建议使用文件系统副本备份数据库。
假设您今天使用 MySQL 5.0 以这种方式备份数据库。有一天,您需要恢复备份,但到那时您将使用一些未来版本,例如 MySQL 6.5。这些ib_data
文件在将来的版本中是否仍使用相同的内部格式?MySQL 6.5 会读取您今天备份的那些文件吗?你不能确定。备份格式旨在更便携。