备份时重定向网站

备份时重定向网站

我曾经incron为一个网站创建备份,并且我喜欢在我的脚本运行时将所有请求重定向到另一个网站。

到目前为止,我所做的是……
incron每次更新 中的文件时都会运行一些脚本/var/www。首先,它会向数据库添加一些条目。然后,它会使用 进行 gnu 增量备份tar。之后,它会mysqldump提取数据库并gzip压缩 sql 文件。

现在我也想将统计数据添加到我的数据库中。我正考虑将其添加 /var/log/apache2/access.logincron

但这样我会弄乱我的数据库备份。我需要一种安全的方法来提取我的数据库,而无需关闭apache或关闭mysql。我可以阻止对 mysql 的写访问,但我的网站仍然可用,同时我无法更新统计数据而不会出现错误。

只要我的脚本正在运行,有没有办法重定向一个域的所有访问?也许mod_rewrite有一些if,但我必须使用哪些参数呢?

说实话,我不知道如何存档这个,我很高兴听到一些建议。

Apache 2.4.10
MySQL 5.7
Debian Jessie

答案1

我需要一种安全的方法来提取我的数据库,而无需关闭 Apache 或 MySQL。

我觉得你只是想避免任何修改到你的数据库在备份期间,以保持一致性。如果所有内容都在一个数据库中,那么你的重定向场景可能会过于复杂。MySQL 5.7 参考手册mysqldump帮助我们:

--lock-tables, -l

对于每个转储的数据库,在转储之前锁定所有要转储的表。表被锁定以READ LOCAL允许在表的情况下进行并发插入MyISAM。对于诸如 之类的事务表 InnoDB--single-transaction是比 更好的选择, --lock-tables因为它根本不需要锁定表。

由于--lock-tables对每个数据库单独锁定表,因此此选项不能保证转储文件中的表在数据库之间逻辑上一致。不同数据库中的表可能以完全不同的状态转储。

--single-transaction

此选项将事务隔离模式设置为可重复读,并发送开始交易SQL 语句在转储数据之前发送到服务器。它只对事务表有用,例如InnoDB,因为它会在转储数据时转储数据库的一致状态开始交易是在没有阻止任何应用程序的情况下发布的。

使用此选项时,应记住,只有InnoDB表才会以一致状态转储。例如,使用此选项时转储的任何表MyISAMMEMORY表仍可能改变状态。

相关内容