我正在使用 Postgres 为 webapp 存储各种应用程序数据。该应用程序的一部分涉及存储和检索用户上传的文件。我将文件存储在文件系统中,并在数据库中存储一些相关的元数据。
我正在尝试提出备份和存档策略,以便我可以有效地备份和存档/恢复数据库和链接文件。这是我想要完成的事情。
执行可用于从故障中恢复的例行备份,其中包括所有数据库数据和链接文件。理想情况下,此备份将在应用程序运行时完成。使用数据库当然可以进行实时备份,但我不确定在备份过程中如何使链接文件与数据库保持一致
归档数据块,因为它们变得“旧”。这些块必须包括数据库数据和任何链接文件。应该可以将归档数据重新投入生产。如果可以很容易地确定每个块中存储了哪些范围的对象,那将是理想的。
您对如何实现这些目标有什么建议吗?如果文件以 BLOBS 形式存在于数据库中,则这些任务会容易得多,因为正常的数据库备份和恢复功能可以处理此问题。当文件数据链接到数据库行时,我不确定如何完成同样的事情。
注意:我在 ServerFault 上问过这个问题,但在那里没有得到任何回应。该问题的链接是:https ://serverfault.com/q/284218/85719
如果您通过散列存储文件并将散列链接到数据库行,则可以简化维护一致性。
在这种情况下,您可以:
继续增量备份文件系统(例如使用 rsync)并且永不删除
或者
如果您想要干净且轻松的还原,LVM + 快照可能是您最好的选择。它不提供时间点恢复,因为在快照之间恢复或覆盖的更改是不可见的,但至少您的文件和数据库以一致的状态备份。
http://tldp.org/HOWTO/LVM-HOWTO/snapshots_backup.html
http://www.howtoforge.com/linux_lvm_snapshots