我有一个 Web 应用程序,它将数据存储到 MySQL 数据库和文件系统中。一些数据库记录引用文件系统上的一些文件。
现在我想创建整个快照。当然,我想确保之后数据库快照中引用的所有文件都存在于文件系统快照中。并且文件系统快照中的所有文件都在数据库快照中被正确引用。
如果我先运行mysqldump
然后tar
上传文件(或反过来),就会出现一定的竞争条件。除此之外,我怀疑在运行备份时是否有任何东西可以阻止其他进程更改文件。
我的第一个想法是在开始备份过程之前简化chmod 444
目录。但我不确定这会给实时系统带来哪些负面影响(我可以想象到一些)。
显然,在这种情况下,我只需关闭 Apache,这样在备份时就不会发生任何更改。但关闭 Web 服务器也不是最优雅的解决方案。
答案1
如果将文件存储在 LVM 卷内,则可以锁定数据库,然后执行 mysqldump 并创建 LVM 快照,最后解锁数据库。然后从 LVM 快照备份。这样,您就可以以最短的锁定时间同步 DB 和 FS 内容。