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

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

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

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

当我执行备份(通过 cron 作业启动)时,我会在网站上设置 .htaccess 规则,将所有请求重定向到静态“关闭以进行备份,稍后恢复”页面。备份完成后,我会删除该规则,然后网站重新打开。

一切都很好,多年来一直如此,你可以想象它运行得非常好,我没有遇到任何问题。

然而...

我希望在备份期间不必关闭网站,所以问题是我可以使用 mysqldump 来实现这一点吗?该工具是否能够处理备份启动后数据发生变化的情况?如果它进行实时备份,我能否保证不会得到损坏的备份?有没有更好的实时备份方法?

答案1

  • 如果使用 InnoDB,则可以同时进行读取和写入。如果还没有使用 InnoDB,您可能想使用它。
  • 使用 InnoDB 允许您使用 --single-transaction 标志运行备份。这将使数据库保持一致状态并实时转储,同时允许其他事务处理。
  • 如果你有一个足够大的数据库(听起来你没有这个也可以),那么你需要其他东西。有一个官方的付费 InnoDB 热备份解决方案,但我不太喜欢这个想法。如果你需要它,请查看http://www.percona.com/docs/wiki/percona-xtrabackup:start

答案2

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

答案3

如果您的存储引擎是 InnoDB,则可以使用 --single-transaction 标志获取实时数据库的一致 mysqldump(只要您在备份期间不更改表结构)。但它不适用于 MyISAM。

答案4

使用InnoDB 数据库或MyISAM 的--single-transaction选项。--lock-tables

相关内容