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

補足。
メールサービスが失敗した場合、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

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

この記事は、以前のパススタイル時のもので、現在はDNSスタイルのみをサポートしています。MinIOを使用する設定チュートリアルは、インターネット上では見つかりません。

Minio の設定かもしれません。

他のツール、例えばバケットに直接アクセスできるツールを使って、直接アップロードできるか試してみてください。

ここで直接アップロードできる場合は、Discourse の設定の問題である可能性が高いです。ここで直接アップロードできない場合は、権限の問題である可能性が高いです。