假设我正在运行一个 HTTP 服务器,其数据位于/var/www
。我想每天自动备份/var/www
到/root/backup/.tmp/var/www
(然后将它们 tar 到某个地方)。
备份主要使用rsync
技术。问题是由于 HTTP 服务器正在运行,因此在 rsync 备份过程中可能会发生文件修改。
对于 HTTP 服务器来说,某个“事务”可能涉及多个文件,例如同时修改文件 A 和 B,因此可能出现这种情况:rsync 备份文件 A => 发生事务并且文件 A 和 B 被修改 => rsync 备份文件 B。这会导致备份的文件不一致(A 在事务之前,而 B 在事务之后)。
对于 HTTP 服务器来说,关闭备份通常是不可行的。有没有办法避免这种不一致的文件备份?
这也适用于其他潜在的服务,如 FTP(某个“交易”可能是上传包含多个文件的文件夹)等。
答案1
这取决于您的环境,但基本上仅使用 rsync 是行不通的。如果您的文件系统支持快照,请使用它在某个时间点冻结整个文件系统状态并从该快照备份。如果不可能,您必须查看不一致是否真的是问题(我见过的 90% 的环境中都不是),如果是,您将需要在备份期间关闭此服务器的新连接。这应该没有问题,因为您的客户将从您的池中的另一台服务器获得服务(如果您只有一台服务器,那么您面临的问题将比不一致的备份更大)。