备份MySQL数据库 – 当它仍在使用中时

我目前使用mysqldump备份我的MySQL数据库,例如:

mysqldump --user USERX --password=PWDX DBNAMEX > dbbackup__`date '+%m-%d-%Y'`.sql 

当我执行备份(通过cron作业启动)时,我在我的站点上设置了一个.htaccess规则,以将任何请求redirect到一个静态的“down for backup,short soon”页面。 一旦备份完成,我删除规则和网站重新打开。

一切顺利,好多年来一直如此,你可以想象这个工作完美,我没有任何问题。

然而…

我想在备份过程中不必closures网站,所以问题是我可以用mysqldump来做这个吗? 该工具是否能够处理备份后数据发生变化的情况? 如果确实有活的备份,我可以保证我不会得到损坏的备份? 有没有更好的方法来做一个实时备份?

  • 如果你使用InnoDB,你可以同时读写。 如果你还没有使用InnoDB,你可能会想要。
  • 使用InnoDB允许您使用–single-transaction标志运行备份。 这将使数据库保持一致的状态,并允许其他事务处理。
  • 如果你有一个足够大的数据库(听起来你可能没有这个),那么你需要别的东西。 有一个官方的付费InnoDB热备份解决scheme,但我回避这样一个想法。 如果你需要的话,看看http://www.percona.com/docs/wiki/percona-xtrabackup:start

尝试看看mysqlhotcopy-根据您的数据库大小/表等,这可能会为您提供答案。

如果你的存储引擎是InnoDB,你可以通过使用–single-transaction标志(只要你在备份过程中不改变你的表结构)来获得一个一致的mysqldump。 但是它不适用于MyISAM。

对InnoDB数据库使用--single-transaction选项,对MyISAM使用--lock-tables