备份与恢复规划

我希望在我的网站上线时有一个良好的备份策略。我已经制定了以下步骤。我遗漏了什么?

数据库备份

  • Discourse 每天进行一次数据库备份。
  • 每天执行一次额外的 cron 数据库备份。(比 UI 备份晚 12 小时)
  • 备份存储在 S3 存储桶中(不同的数据中心)

核心文件

以下文件每天备份两次到 S3 存储桶(不同的数据中心)

  • discourse/containers/app.yml
  • discourse/shared/standalone/uploads/
  • discourse/shared/standalone/backups/
  • discourse/shared/standalone/ssl/
  • discourse/shared/standalone/letsencrypt/

文件备份每天进行两次,在数据库备份后 30 分钟。

S3:上传

  • 上传的每日备份存储在不同数据中心的 S3 存储桶中。

服务器备份

  • 每周备份整个服务器 - 保留 4 个每周备份
  • 每年将一个每周备份存储在远程位置作为主备份。

这应该提供恢复服务器或在新服务器上恢复所需的所有必要数据和设置。

我遗漏了什么吗?

1 个赞

这是建议的方式。如果您每天备份一次数据库,您将面临论坛上最多 24 小时的数据丢失风险。

我被告知至少两次这不成问题,但没有人解释过为什么。所以我每 6 小时备份一次我的数据库——我的论坛不是很繁忙,所以我可以承担这个风险。相比之下——我的电子商务每 4 分钟备份一次。

1 个赞

您是如何设置数据库以更频繁地备份的?我希望每天两次,但用户界面功能只允许每天一次。

You can have a cron job (on your server, not in the container) run

docker exec app bash -c "discourse backup"

If the data are really critical, then you can set up a postgres replication server and have every commit on a second server.

1 个赞

我在 crontab 中有以下内容:

docker exec app discourse backup --sql-only

这是 Discourse 自己用于备份的 CLI 命令,有人告诉我 docker exec app 会在容器外部执行它(app 是容器的名称,当然)。

而且因为我已经配置了 S3,它会跳到与“正常”备份相同的存储桶。

这里有一个小问题……很快就会有大量的备份。我不知道我是否应该以不同的方式进行 sql-dump,使用 aws-cli 移动它,然后删除所有早于某个时间点的数据。或者在 VPS 上做同样的事情。

但这却是获取 sql-dump 最简单的方法。

1 个赞

我假设这会激活内部的 discourse 备份例程,因此所有通知都将保留。\n\n您是在 UI 中关闭备份计划并通过 cron 管理所有内容?还是在 UI 中进行一项,并通过 cron 进行额外的操作?

不。我两者都做。我不太信任系统,也不太信任自己。备份量很少成为真正的问题,短缺才是。

1 个赞

感谢 @Jagster@pfaffman 协助通过 cron 设置了额外的数据库。这样一来,我的系统最坏情况下的数据丢失时间就缩短到了 12 小时。

2 个赞