Discourse 如何下载备份并恢复本地数据库

进入网站的备份界面,会看到当前所有的备份情况。


单击下载按钮。

需要注意的是,当你下载后,系统将会发送一个链接到你的邮箱地址中。

你可以使用邮箱地址中收到的链接进行数据下载。

下载链接

单击邮件中收到的下载链接地址进行下载。


下载的文件为一个 tar.gz 文件,你需要解压后才可以用。

例如,我们当前的下载文件为:isharkfly-2023-09-14-092024-v20230910021213.tar

经过一系列复杂的解压路径后可以看到 dump.sql 这个文件。

这个文件就是你的所有数据库备份了。

数据恢复

Windows 下 PQadmin 的 psql 安装路径为:C:\Users\yhu\AppData\Local\Programs\pgAdmin 4\v7\runtime

我们的运行命令为:psql -h nas1120 -p 5433 -U postgres -W -d discourse -f C:\Users\yhu\Downloads\isharkfly-2023-09-14-092024-v20230910021213\isharkfly-2023-09-14-092024-v20230910021213\dump.sql\dump.sql

本地的数据库在恢复的时候没有办法重复覆盖。

如果你本地数据库已经存在的话,需要清空本地存在的数据库才能进行恢复。

备份恢复的过程需要恢复所有的数据和表结构。

恢复程序没有办法在已有的数据结构上进行恢复,并且进行增量恢复。

检查表数据

检查表数据,确定一些表数据已经恢复到当前。


时间戳通常来说是比较好的校验方式。

1 Like

补充。
如果邮件服务失效,持有ssh权限的人可以在 /var/discouse/{standalone | web_only}/backup/default 中看到所有的备份文件。

A note:
If the mail service fails, admin with ssh permissions can see all backup files in /var/discouse/{standalone | web_only}/backup/default.

3 Likes

请问如何使用Minio进行备份?看不懂日志的报错信息,日志如下:

....
[2023-10-03 13:33:24] Removing tmp '/var/www/discourse/tmp/backups/default/2023-10-03-133319' directory...
[2023-10-03 13:33:24] Gzipping archive, this may take a while...
[2023-10-03 13:33:25] Uploading archive...
[2023-10-03 13:33:27] EXCEPTION: Aws::S3::Errors::Forbidden
[2023-10-03 13:33:27] /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/object.rb:445:in `rescue in exists?'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/aws-sdk-s3-1.114.0/lib/aws-sdk-s3/object.rb:440:in `exists?'
/var/www/discourse/lib/backup_restore/s3_backup_store.rb:46:in `upload_file'
/var/www/discourse/lib/backup_restore/backuper.rb:344:in `upload_archive'
/var/www/discourse/lib/backup_restore/backuper.rb:41:in `run'
/var/www/discourse/script/spawn_backup_restore.rb:9:in `backup'
/var/www/discourse/script/spawn_backup_restore.rb:31:in `block in <main>'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `fork'
/var/www/discourse/script/spawn_backup_restore.rb:4:in `<main>'
[2023-10-03 13:33:27] Deleting old backups...
[2023-10-03 13:33:28] Cleaning stuff up...
[2023-10-03 13:33:28] Removing archive from local storage...
[2023-10-03 13:33:28] Removing '.tar' leftovers...
[2023-10-03 13:33:28] Marking backup as finished...
[2023-10-03 13:33:28] Notifying 'XXX' of the end of the backup...

上面的日志应该说的是 S3 没有权限。

确定下你的 S3 权限设置正确。

以下是我的设置,请大佬看看是哪里设置出问题了:

  1. Discourse设置
  2. Minio 备份桶权限设置
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::discourse-backup"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "*"
                ]
            },
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::discourse-backup/*"
            ]
        }
    ]
}
  1. Minio 上传桶权限是public

参考下这篇文章看看:discourse-docs/minio.md at master · rishabhnambiar/discourse-docs · GitHub

这篇文章还是之前有path style时候的,现在只支持dns style了,全网找不到用minio的配置教程

那看看可能还是在 Minio 设置上面。

你试试,使用其他的工具,比如说能够直接访问存储桶的工具能不能直接上传。

如果这里能够直接上传的话,那多半是 Discourse 的配置问题,如果这里不能直接上传,那么多半是权限。