Как скачать резервную копию и восстановить локальную базу данных в Discourse

Перейдите на страницу резервного копирования сайта, чтобы увидеть все текущие резервные копии.


Нажмите кнопку «Скачать».

Обратите внимание: после скачивания система отправит ссылку на ваш адрес электронной почты.

Вы можете использовать ссылку, полученную на электронную почту, для загрузки данных.

Ссылка для скачивания

Нажмите на ссылку для скачивания, полученную в письме.


Скачанный файл имеет формат tar.gz; его необходимо распаковать перед использованием.

Например, наш текущий скачанный файл: isharkfly-2023-09-14-092024-v20230910021213.tar

После выполнения ряда сложных шагов по распаковке вы увидите файл dump.sql.

Этот файл содержит все ваши резервные копии базы данных.

Восстановление данных

Путь к установке psql в PQadmin для Windows: 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

Локальную базу данных невозможно перезаписать повторно при восстановлении.

Если локальная база данных уже существует, её необходимо очистить перед восстановлением.

Процесс восстановления резервной копии требует восстановления всех данных и структуры таблиц.

Программа восстановления не может работать поверх существующей структуры данных и не поддерживает инкрементальное восстановление.

Проверка данных таблиц

Проверьте данные таблиц, чтобы убедиться, что некоторые таблицы уже восстановлены.


Временная метка обычно является хорошим способом проверки.

Дополнение.
Если служба электронной почты не работает, администратор с правами SSH может увидеть все файлы резервных копий в /var/discourse/{standalone | web_only}/backup/default.

Примечание:
Если служба электронной почты не работает, администратор с правами SSH может увидеть все файлы резервных копий в /var/discourse/{standalone | web_only}/backup/default.

Как использовать MinIO для резервного копирования? Не могу разобраться с ошибкой в логах. Вот логи:

....
[2023-10-03 13:33:24] Удаление временной директории '/var/www/discourse/tmp/backups/default/2023-10-03-133319'...
[2023-10-03 13:33:24] Сжатие архива в gzip, это может занять некоторое время...
[2023-10-03 13:33:25] Загрузка архива...
[2023-10-03 13:33:27] ИСКЛЮЧЕНИЕ: 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] Удаление старых резервных копий...
[2023-10-03 13:33:28] Очистка временных файлов...
[2023-10-03 13:33:28] Удаление архива из локального хранилища...
[2023-10-03 13:33:28] Удаление остатков '.tar'...
[2023-10-03 13:33:28] Пометка резервной копии как завершенной...
[2023-10-03 13:33:28] Уведомление 'XXX' об окончании резервного копирования...

Судя по логам выше, у 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 установлены как публичные.

Ознакомьтесь со следующей статьёй: discourse-docs/minio.md at master · rishabhnambiar/discourse-docs · GitHub

Эта статья была написана, когда ещё поддерживался path-style доступ. Сейчас поддерживается только dns-style, и в интернете невозможно найти инструкции по настройке MinIO.

Возможно, проблема всё же в настройках MinIO.

Попробуйте использовать другой инструмент, например, такой, который позволяет напрямую обращаться к хранилищу (бакету), и проверить, сможете ли вы загрузить файл напрямую.

Если загрузка напрямую возможна, то проблема, скорее всего, в конфигурации Discourse. Если же загрузка невозможна, то, вероятнее всего, дело в правах доступа.