我正在使用运行定制软件包的 Fedora 服务器。该服务器软件相当老旧,其数据库包含 1,723 个文件。数据库文件不断变化 - 它们不断增长,并且更改不一定附加到末尾。因此,目前,我们目前每 24 小时备份一次,时间为午夜,此时所有用户都已离开系统,并且数据库处于内部一致状态。
问题是我们可能会丢失一整天的工作成果,而且无法恢复。所以我想知道是否有办法对这些数据库文件进行即时快照,以便我们每 30 分钟左右备份一次。
我读过有关 Linux LVM 快照的文章,并认为我可以通过拍摄快照、将文件 rsync 到备份服务器,然后删除快照来实现目标。但我以前从未这样做过,所以我不知道这是否是“正确”的修复方法。
对此有什么想法吗?还有更好的解决方案吗?
谢谢!
答案1
这一切都取决于数据库。如果您没有办法告诉数据库引擎“让所有文件处于一致状态”,那么您就无法创建快照,因为快照无法保证其中的文件之间是一致的——您可以在数据库中的一个文件已更改而另一个文件未更改时创建快照。
真的,听起来你有一个真正的专有应用程序,你需要与该应用程序的供应商讨论备份的可能性。我们无法帮助你全部不知道噩梦是什么,甚至那时……
但是,如果您能想出一种方法来告诉数据库引擎“将所有更改同步到磁盘”,那么 LVM 快照是完成其余数据复制的非常合理的方法。有关如何执行整个过程(同步到磁盘、快照、挂载快照、复制数据)的示例,请查看 mylvmbackup。对于 MySQL 服务器,它正是执行此过程。
答案2
我认为 LVM 是个不错的选择,但首先你需要确保文件处于一致状态。因此,无论你使用什么解决方案,如果文件损坏,它们都是没有意义的。
假设您拍摄了快照,但同时您的数据库正在向文件中写入一些数据。如果在文件仅部分同步时拍摄快照,您就会遇到麻烦。
您知道人们说糟糕的备份比没有备份更糟糕吗?
因此,我建议找出如何暂时将写入锁定到数据库中,然后同步磁盘、拍摄快照并再次解锁数据库。拍摄快照不会花费很长时间,因此如果用户可以忍受一些延迟,我会选择这条路径。