“还原”失败:可以忽略差异

此主题后来演变成“恢复失败”,从第 4 帖开始,这是现在的主要问题。您可以忽略前 4 帖。

我几年前/一开始就将我的上传设置为了 AWS S3。
即使我(据我所知)从未启用将 S3 上传包含在我的备份中的选项,但昨天,当我选择在备份中包含“上传”时,我在日志中看到了这个:

这引起了一些奇怪的差异,让我感到困惑:

  1. 昨天晚上,我在管理员设置中切换了将“上传”包含在备份中的选项。然后当我通过 WinScp 查看本地“共享上传”文件夹时,它只有不到 100 个文件,只在 1 个文件夹中(没有其他 2x、3x 文件夹,如果需要可以分享截图)。那么为什么备份日志显示下载了大约 3K 个文件。(“下载失败”是这些日志中的另一个令人头疼的问题,但那是“其他”问题)。现在,如果它正在从本地存储下载这些文件,那么这些文件到底存在于何处?如果它正在从 S3 下载,那么 a) 为什么它会从那里下载,因为我从未在 rails 控制台中更改过将 S3 数据包含在备份中的选项,也没有在我的 yml 文件的 Env 部分创建任何类似选项。
  2. 然后今天我将 Rails 控制台中的该选项更改为“True”。现在,当我运行备份作业时,它显示下载了相同的约 3.2k 个文件,约有 100 个“下载失败”。但当我检查我的 AWS S3 存储桶时,它有近 10 倍,32k 个文件,约 3GB。那么为什么它没有下载所有这些文件?
  3. 是否有办法对所有这些数据进行核对/同步,并可能了解正在发生哪些差异以及在哪里发生的?
  4. 现在我非常困惑,我该怎么办。我的最终目标是将我(过于昂贵)的 AWS 存储转移到更便宜的版本(Hetzner 本身,我的 VPS 运行在那里,非常非常便宜,所以我也可以增加我的主服务器的存储空间)。

谢谢。请给我一些指导。

即使我的“Uploads”文件夹(在Aws S3存储桶中)超过3 GB(3.2k个文件),为什么备份只有不到1 GB(只下载了2.9k个文件到备份中),即使通过rails控制台启用了“include_s3_uploads_in_backup”选项?

该设置会将文件下载到临时目录并将其包含在备份中。它不会将它们放入上传目录。要将它们放入上传目录,您需要恢复备份。我建议在新服务器上进行操作,这样如果出现任何问题,您的原始服务器仍然完好无损。

听起来有些文件可能丢失了。您是否有帖子缺少图片?另一种可能性是上传表包含不再被帖子引用的上传,因此那些丢失的图片无关紧要。

如果只有大约 100 个,那可能不是什么大问题。

或者,可能是某个时候的错误清理(删除了)本应保留的文件。

要查看它下载的文件,您需要下载备份文件并查看其中包含的内容。将备份恢复到新服务器以查看其工作原理。

1 个赞

但主要问题是,为什么备份只有不到 1 GB(只有 3100 个文件),即使 S3 的“Uploads”文件夹也只有 3.2 GB 和 32K 个文件。(备份日志清楚地显示它只下载了大约 10%,3k 个文件)。

[对我来说,创建一个新的 discourse 设置并使用不同的域来测试这件事非常麻烦,尽管我觉得创建一个快照然后,如果需要,可以在 5 分钟内恢复我那个不怎么繁忙的网站,没有任何麻烦,这非常容易。]

嗯,我以为即使更改了 Rails C 中的选项,为什么不在 yml 中也添加这一行 DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true,想着这或许会调用我所有的 Aws S3 上传文件。

但是,在更改了 yml 中的这个选项,重建容器,运行备份后,我在备份日志中发现了同样的条目(3000 次媒体下载,约 100 次失败)。

当我尝试恢复时(我还没有更改管理设置中的任何上传/S3 设置),它报错了。

完整日志:
![image|690x389](upload://fN6fSsRv2l37aN7O2Mxie7kwx8V.png)

所以它会尝试将图像上传到您的 S3 存储桶。

如果您打开 tar 文件,您会发现它包含了您所有的图像,除了您收到错误消息的那一百张。

1 个赞

image
所以,我禁用了 S3 上传,然后尝试恢复我的 1 GB 备份(备份仍在 AWS S3 上),但它又失败了。这可能是哪里出了问题?

此外,在恢复失败后,我被登出了,再次登录时,我看到一个横幅,上面写着所有非员工电子邮件都已禁用。当我尝试访问电子邮件收到的链接中的日志时,找不到该文件/无法访问(显示了我设置的错误页面)。

当它尝试恢复时,就在我被登出之前,我看到了这些日志消息:

[2024-08-19 04:12:58] 'Bathinda_Helper' has started the restore!
[2024-08-19 04:12:58] Marking restore as running...
[2024-08-19 04:12:58] Making sure /var/www/discourse/tmp/restores/default/2024-08-19-041258 exists...
[2024-08-19 04:12:59] Downloading archive to tmp directory...

在后续的“FAILED-restore”尝试中,我能够在退出登录前点击日志链接。这是日志:
log- failed restore.txt (98.9 KB)

我已经做了一些实验,新的上传确实正在我的本地 Ubuntu 服务器上创建。但是从 S3 恢复到本地失败了。但问题是,我检查过的一些帖子仍然继续显示来自 S3 的图片(那些没有丢失)。

请指导。

请帮忙。恢复又失败了。

另外,在“恢复失败”之后,即使我使用相同的管理员登录,也无法访问“Log.txt”附件。它显示页面不可用/我的设置错误页面。

您可以尝试在命令行中恢复,并使用 tmux 或 screen,以便您可以滚动查看日志。

1 个赞

从您这篇帖子中,我按照您的指示,通过 Tmux 尝试了以下操作,但失败了,出现如下错误:

另外,因为我有 ‘data’ 和 ‘Web_only’ 两个容器,我应该恢复到哪个容器上?

您正在从 web_only 容器进行恢复,就像您之前做的那样。

您已经在第一个命令中成功启用了恢复(不知道您为什么会尝试用其他方式再次执行),现在执行

discourse restore

1 个赞

我实际上尝试过和你上面提到的帖子里的截图做完全一样的事情。无论如何,我现在只会执行“Discourse restore”。

据我所理解/我希望,我不需要提供备份(.tz)文件所在的任何路径,它会自动从我的本地服务器备份文件夹中选取。

1 个赞