我目前使用 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