我正在尝试将我的 discourse 实例迁移到新服务器。由于服务器空间有限,我想先\n\n我该如何在初始上传数据库后暂停图片优化并恢复它。\n\n这样我就可以检查恢复是否成功,然后删除备份文件。\n\n我的备份文件大约 200GB,其中包含未勾选的设置“在备份中包含生成的缩略图”。禁用此选项将使备份变小,但需要在恢复后重新烘焙所有帖子。\n\n因此,如果我的实例保存备份文件并开始优化图片,我将没有磁盘空间了。
如果您需要更多空间,您就需要更多空间。
但也许您想使用 rsync 同步图像并仅恢复数据库。这样您就不必拥有所有上传文件的两个副本(并且不必重新创建缩略图)。
感谢您的帮助。
我确实尝试过,但不确定为什么我的恢复不顺利。
我的主要问题是我的旧实例停留在 PostgreSQL 12 版本,我找不到升级它的方法,因此尝试迁移到一个新的干净实例。
您知道是否可以将数据库仅恢复到新安装吗?
当我尝试时,实例只是开始返回错误代码 500,我不得不从头开始。
我会按照使用 rsync 将 Discourse 站点迁移到另一台 VPS 的步骤操作,但不要复制 postgres 文件。
然后执行一次仅数据库的备份并恢复。你也会通过 rsync 传输备份,并在命令行中进行恢复。
这是个很老的版本吗?恢复看起来成功完成了?
感谢您的帮助。
是的,但对于使用 Web GUI 和预期过程的直接恢复,您需要备份文件大小的 4 倍以上的可用空间。
方法如下:
- 上传备份文件(或 rsync 到
/var/discourse/shared/standalone/backups/default) - 恢复初始化后,备份文件
.gz会被复制到/var/discourse/shared/standalone/tmp/restores/ - 恢复过程中,
/var/discourse/shared/standalone/tmp/restores/文件夹中的备份文件会被解压 - 从 tmp 文件夹,上传文件会被 rsync 到原生位置,SQL dump 会被插入到 pg 数据库。
我是如何成功恢复的。
在恢复过程中,一旦 discourse 将文件从恢复文件夹复制到临时文件夹,我就会删除通过 SSH 上传的原始备份文件。
再次,当 discourse 完成 SQL 插入和状态 rsync 将文件从临时文件夹解压到 /var/discourse/shared/standalone/uploads/ 后,我手动删除了临时文件夹中的 bakupxxx.tar.gz 文件,而没有中断恢复过程。
当我的实例上线并且 rsync 完成后,我执行了
rm -rf /var/discourse/shared/standalone/tmp/restores/default/*
如果您备份了大型恢复过程,我的实例似乎会崩溃,并且 Web 实例开始返回错误代码 500(对我来说发生了两次),您可以通过进入应用程序来检查恢复过程
cd /var/discourse
./launcher enter app
ps aux | grep restore
另外,由于我的数据库恢复时间太长
cd /var/discourse
./launcher enter app
watch -n 10 “sudo -u postgres psql discourse -c "SELECT now(), state, query FROM pg_stat_activity WHERE state != ‘idle’;””
这有助于我监控数据库恢复进度,以查看恢复是否仍在进行中。
这真是一个了不起的解决方案!如果其他人遇到这个问题,我认为只进行数据库还原会更简单一些,但很高兴你解决了问题!