# 每日多次备份

**URL:** https://meta.discourse.org/t/multiple-daily-backups/211951
**Category:** Support
**Created:** [2021年十二月13日 12:37 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951 "2021-12-13T12:37:11Z")
**Posts on this page:** 16
**Page:** 1

<div class="post-metadata">

### Author: ![yhh9xdq7d](https://avatars.discourse-cdn.com/v4/letter/y/f0a364/32.png) [@yhh9xdq7d](https://meta.discourse.org/u/yhh9xdq7d)
#### Post date: [2021年十二月13日 12:37 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/1 "2021-12-13T12:37:11Z")

</div>

每天只备份一次是不是太冒险了？如果服务器出现问题，而上次备份是在昨天，我该怎么办？昨天和今天注册的用户，他们还会被注册吗？我认为最好更频繁地备份，也许每小时一次。但是，在进行备份之前，您是否必须将网站设为只读模式？提前感谢！

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [2021年十二月13日 13:45 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/2 "2021-12-13T13:45:49Z")

</div>

+1，再说一次。Discourse是唯一一个可以每天只备份一次数据库的动态系统。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2021年十二月13日 18:45 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/3 "2021-12-13T18:45:33Z")

</div>

我预计核心功能短期内不会有任何改变。我曾就将默认值更改为每周一次以上进行过讨论，但那不会发生。

我认为一个好的方法是创建一个插件，该插件可以添加一个站点设置，以便每隔几个小时进行一次仅数据库的备份（没有理由在所有这些完整备份中保留大量无法压缩的上传副本）。如果您有兴趣，请给我发私信或在市场中询问。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2021年十二月13日 18:59 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/4 "2021-12-13T18:59:38Z")

</div>

如果您需要更好的灾难恢复方案，我建议您遵循[运行带有独立 PostgreSQL 服务器的 Discourse](https://meta.discourse.org/t/running-discourse-with-a-separate-postgresql-server/46375) 并自行运行 PostgreSQL，这样您就可以控制所需的确切高可用性，例如实时同步副本、时间点恢复和更频繁的备份。

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [2021年十二月13日 19:25 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/5 "2021-12-13T19:25:19Z")

</div>

请问此政策的原因是什么？是技术原因还是更偏向于用户分级？24小时的备份间隔对于高流量论坛来说是一个相当关键的问题。或者这是你们只提供给付费客户的服务吗？

---

<div class="post-metadata">

### Author: ![yhh9xdq7d](https://avatars.discourse-cdn.com/v4/letter/y/f0a364/32.png) [@yhh9xdq7d](https://meta.discourse.org/u/yhh9xdq7d)
#### Post date: [2021年十二月13日 19:28 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/6 "2021-12-13T19:28:17Z")

</div>

将 Discourse 与单独的 PostgreSQL 服务器分开运行是否会因为服务器不同而降低速度？

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [2021年十二月13日 19:32 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/7 "2021-12-13T19:32:49Z")

</div>

> [@Falco](#):
>
> running PostgreSQL on your own

当然，这是一个解决方案。但在应用程序中，这是一种相当罕见的解决方案。在 PHP/MySQL 世界中，使用 cron 备份数据库会非常容易，但同样——在那个世界里，每个应用程序都可以自己完成，无论是否有插件。

是的，我比普通终端用户了解得多一点 😉 但我对 Docker、Rails 等的工作原理只有非常肤浅的了解，对我来说，一些常见任务几乎是不可能完成的情况真的很难理解。当然，也许这是因为我的局限性，但也有其他人对此感到困惑。

好吧。我明白了，在不久的将来或中期，我们无法轻松获得数据库备份。

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2021年十二月13日 19:34 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/8 "2021-12-13T19:34:34Z")

</div>

> [@Jagster](#):
>
> 在 PHP/MySQL 环境中，使用 cron 备份数据库会非常容易

你也可以使用 cron 设置 PostgreSQL 备份。这里没什么不同。

> [@yhh9xdq7d](#):
>
> 运行 Discourse 时使用独立的 PostgreSQL 服务器是否会因为在不同服务器上而降低速度？

在任何相关方面都不会。我们托管的每个 Discourse 实例，就像这里的这个实例一样，都在专用服务器上使用数据库。

---

<div class="post-metadata">

### Author: ![yhh9xdq7d](https://avatars.discourse-cdn.com/v4/letter/y/f0a364/32.png) [@yhh9xdq7d](https://meta.discourse.org/u/yhh9xdq7d)
#### Post date: [2021年十二月13日 19:47 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/10 "2021-12-13T19:47:07Z")

</div>

我只问你两个问题，以便更好地理解。

1. 数据库是您恢复一切所需的一切，对吗？通过设置进行的每日备份，备份是否只包含数据库？
2. 在备份数据库时，论坛是否应处于只读模式？或者可以随时随地进行备份，没有任何问题？

提前表示感谢！

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2021年十二月13日 19:50 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/11 "2021-12-13T19:50:14Z")

</div>

> [@yhh9xdq7d](#):
>
> 通过设置每天进行的备份，是否只备份数据库？

设置保存在数据库中。

> [@yhh9xdq7d](#):
>
> 要恢复一切，只需要数据库，对吗？

严格来说，您还想备份 uploads 文件夹和 app.yml 站点定义。但是，这通常通过将 app.yml 保存在源代码管理中，并将 uploads 保存在对象存储服务中来处理。

> [@yhh9xdq7d](#):
>
> 备份数据库时，论坛是否应处于只读模式？还是可以随时进行，没有任何问题？

不需要只读模式。

---

<div class="post-metadata">

### Author: ![yhh9xdq7d](https://avatars.discourse-cdn.com/v4/letter/y/f0a364/32.png) [@yhh9xdq7d](https://meta.discourse.org/u/yhh9xdq7d)
#### Post date: [2021年十二月13日 20:25 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/12 "2021-12-13T20:25:26Z")

</div>

因此，假设我将数据库放在单独的服务器上，并每小时备份一次该数据库。如果我还从管理面板的设置中进行备份，那么备份将只包含 app.yml 文件和 uploads 文件夹，而不包含数据库，对吗？@Falco

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2021年十二月13日 21:37 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/13 "2021-12-13T21:37:34Z")

</div>

备份将包括数据库和上传文件（如果它们不在 S3 上）。app.yml 不在备份中，因为 Discourse 无法读取它。

我推荐大多数人的做法是：将备份放在 S3 上，并将 `app.yml` 放在紧急情况下可以获取到的地方。然后，您可以使用 `app.yml` 构建一个新容器，并从命令行进行恢复。但是，如果您有技术能力使用其他工具备份/恢复 postgres，并且图像在 S3 上（或者您有其他方式备份它们），那么您只需重建容器即可恢复。

或者，您可能希望拥有多个持续镜像的 postgres 服务器，然后安排在主服务器出现故障时自动切换到备份服务器。

有无数种方法可以提供比 Discourse 提供的更频繁的备份。如果您需要更频繁的备份，则需要通过其他方式进行。

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [2021年十二月13日 22:52 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/14 "2021-12-13T22:52:48Z")

</div>

另外一点是关于风险和维护：如果您使用现成的每日解决方案，它可能比您自己配置的解决方案更健壮、更可靠，可以作为备份解决方案。如果您的自定义解决方案出现问题，而您直到为时已晚才发现怎么办？至少，标准解决方案有数百个站点每天都在对其进行测试。

考虑到我在四年内从未遇到过任何站点损坏的经历，实际上需要备份的风险也很低……

也许其他人可以提到更大的风险，但最大的风险可能是由于服务器空间不足导致的问题？所以要留意空间？设置警报？

---

<div class="post-metadata">

### Author: ![yhh9xdq7d](https://avatars.discourse-cdn.com/v4/letter/y/f0a364/32.png) [@yhh9xdq7d](https://meta.discourse.org/u/yhh9xdq7d)
#### Post date: [2021年十二月14日 06:51 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/15 "2021-12-14T06:51:58Z")

</div>

据我理解，最好的方法是将所有东西分开存放。

主服务器用于运行 Discourse。然后是 PostgreSQL 服务器和用于上传的 S3（或任何其他对象存储服务）服务器。

app.yml 文件似乎不经常更改，因此您只需保存一次。或者最多一个月更改几次。

这样您就可以更有条理地备份文件。

如果是这样，我认为他们不愿在核心中实现多项每日备份是有道理的。另一方面，那些有复杂需求的人肯定会进行特殊的配置。最后，您只需重新安装（将 app.yml 保存在某处），然后将其重新连接到数据库和 S3 以下载数据。备份分别在这两个服务器上，对我来说很容易管理。我认为这是一个非常公平的解决方案。

感谢大家的解释。

---

<div class="post-metadata">

### Author: ![Tris20](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tris20/32/264639_2.png) [@Tris20](https://meta.discourse.org/u/Tris20)
#### Post date: [2021年十二月14日 13:25 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/16 "2021-12-14T13:25:44Z")

</div>

这里还有另一个帖子：[Configure automatic backups for Discourse - #113 by Tris20](https://meta.discourse.org/t/configure-automatic-backups-for-discourse/14855/113)

@pfaffman 在那里提出了一些建议并附带了链接。这让我想到可以通过命令行来安排更频繁的备份，对我来说这是一个相当合理的解决方案：

> [@Backup discourse from the command line](https://meta.discourse.org/t/backup-discourse-from-the-command-line/64364):
>
> bookmark This guide covers how to back up and restore your Discourse site using command line tools, specifically designed for self-hosted environments. person_raising_hand Required user level: Administrator information_source You can use the below placeholders to automatically fill out the command line prompts in this guide: Backing up To create a backup of your Discourse site, follow these steps: Enter the container: ./launcher enter app Run the backup: discourse backu…

请注意，使用此解决方案，您可以将其全部合并到一个 Python 脚本中，以便同时安排 YAML 文件等的副本。

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [2022年一月13日 13:26 UTC](https://meta.discourse.org/t/multiple-daily-backups/211951/17 "2022-01-13T13:26:28Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
