备份和复制是两件不同的事情。
备份提供特定时间点的数据快照。它们提供了一个恢复点。
复制是将每个操作分发到不同的系统,以便您可以在多个位置拥有它。删除操作也会被复制。
如果您真的想实现容错,就需要同时拥有两者。(以及更多……)
因此,复制只解决了在多个位置拥有当前数据的问题。备份提供了将系统恢复到特定时间点的方法。
Discourse 使用两种机制进行存储:
- PostgreSQL 数据库,用于除附加文件外的所有内容
- 附加文件存储在本地系统或 S3 中
要备份和/或复制存储在 PostgreSQL 数据库中的数据,您可以查阅 PostgreSQL 文档了解如何操作。关于备份,以及复制。
附加文件有点棘手。如果存储在 S3 中,您可以使用 S3 备份。对于本地存储的文件,您可以使用各种本地系统选项。
创建完整备份是一项繁重的工作,具体取决于数据量。因此,不能轻易更频繁地执行此操作。Discourse 的标准备份程序是创建完整备份。如果您真的想降低丢失数据的风险,就需要寻找其他选项。
您的托管服务可能会提供一个选项:卷快照。这提供了一种创建存储在卷中的数据的“即时”副本的方法。这允许您将卷恢复到该时间点。卷快照也可能在操作系统中可用,具体取决于所使用的文件系统。(例如,btrfs 支持此功能。)
除此之外,PostgreSQL 文档还介绍了如何创建更连续的数据库备份,从而实现出色的时间点恢复。 (不要忘记将备份发送到异地!)这比完整备份快得多。
对于更细粒度的附件备份,您可以使用各种允许管理完整+差异备份的备份工具。例如 duplicity。或者您可以使用 rsync(不带删除选项)。在快照之间,您仍然可能会丢失文件。不带删除地使用 S3 会更安全,因为文件已经在另一个系统上了。
总而言之。Discourse 的标准备份机制不太适合更频繁的备份计划。如果您想进行更多备份,请使用标准 PostgreSQL 备份/复制功能、S3、卷快照等的组合。
在我的站点上,我没有使用 Discourse 的备份系统进行常规备份。我仍然有每日备份,但我使用了 pg_dumps 和 duplicity 配置的组合(通过 backupninja 进行协调)。