Вы можете настроить резервное копирование и восстановление данных ELMA365 с помощью следующих программ:
- WAL-G — это утилита для создания резервных копий и восстановления баз данных, которая поддерживает несколько СУБД, включая PostgreSQL и MongoDB.
Она использует механизм непрерывного архивирования (Continuous Archiving) и точки восстановления (Point-in-Time Recovery, PITR) для обеспечения надёжной архивации и восстановления данных.
WAL-G поддерживает хранение резервных копий в различных облачных хранилищах, таких как Amazon S3, Google Cloud Storage, Azure Blob Storage и других.
- Rclone — это многопоточная программа с открытым исходным кодом и командной строкой для управления контентом. Позволяет переносить данные в облако и другие хранилища.
В статье описан процесс резервного копирования и восстановления PostgreSQL 15 и MongoDB 6 в ОС Ubuntu Linux 22.04.
Настройка WAL-G для PostgreSQL
Для резервного копирования данных с помощью WAL-G выполните следующие действия:
- Предварительно установите WAL-G с официального GitHub-репозитория:
wget https://github.com/wal-g/wal-g/releases/download/v3.0.5/wal-g-pg-ubuntu-22.04-amd64.tar.gz
tar -xzf wal-g-pg-ubuntu-22.04-amd64.tar.gz
sudo mv wal-g-pg-ubuntu-22.04-amd64 /usr/local/bin/wal-g-pg
- Настройте переменные окружения для доступа к облачному хранилищу. Для этого откройте файл конфигурации
/etc/postgresql/15/main/.walg.json
и добавьте следующие параметры:
{
"WALG_S3_PREFIX": "s3://elma365-backup/postgres",
"AWS_ENDPOINT": "https://storage.yandexcloud.net",
"AWS_ACCESS_KEY_ID": "<your-access-key-id>",
"AWS_SECRET_ACCESS_KEY": "<your-secret-access-key>",
"AWS_REGION": "us-east-1",
"AWS_S3_FORCE_PATH_STYLE": "true",
"WALG_COMPRESSION_METHOD": "brotli",
"WALG_DELTA_MAX_STEPS": "6",
"PGHOST": "/var/run/postgresql",
"PGDATA": "/var/lib/postgresql/15/main",
"PGSSLMODE": "disable"
}
Здесь:
WALG_S3_PREFIX
— указывает путь к хранилищу S3, где будут храниться резервные копии и .WAL-файлы (Write-Ahead Logs);AWS_ENDPOINT
— указывает точку доступа (endpoint) для S3-совместимого хранилища;AWS_ACCESS_KEY_ID
— идентификатор ключа доступа (Access Key ID) для аутентификации в S3-совместимом хранилище;AWS_SECRET_ACCESS_KEY
— секретный ключ (Secret Access Key) для аутентификации в S3-совместимом хранилище;AWS_REGION
— регион, в котором находится S3-совместимое хранилище;AWS_S3_FORCE_PATH_STYLE
— указывает, что нужно использовать path-style для доступа к S3-бакетам;WALG_COMPRESSION_METHOD
— метод сжатия, используемый для резервных копий. В данном случае используется алгоритмBrotli
, который обеспечивает хорошее соотношение между степенью сжатия и скоростью;WALG_DELTA_MAX_STEPS
— максимальное количество шагов (delta steps), которые WAL-G может использовать для постепенно увеличивающихся (дельта) резервных копий. Позволяет экономить место, храня только изменения между резервными копиями;PGHOST
— указывает путь к сокету PostgreSQL, через который WAL-G будет подключаться к базе данных. Используется для выполнения команд, требующих подключения к PostgreSQL;PGDATA
— путь к каталогу данных PostgreSQL. WAL-G использует этот параметр для определения, где находятся данные PostgreSQL, чтобы корректно выполнять резервное копирование и восстановление;PGSSLMODE
— указывает, что SSL/TLS-шифрование для подключения к PostgreSQL отключено. Это может быть полезно для локальных подключений, где шифрование не требуется.
- Меняем владельца файла:
chown postgres: /etc/postgresql/15/main/.walg.json
- Чтобы использовать WAL-G, настройте PostgreSQL для работы с непрерывным архивированием. Для этого откройте файл конфигурации
/etc/postgresql/15/main/postgresql.conf
и добавьте следующие параметры:
archive_mode = on
archive_timeout = 600s
archive_command = '/usr/local/bin/wal-g-pg wal-push "%p" --config /etc/postgresql/15/main/.walg.json >> /var/log/postgresql/archive_command.log 2>&1'
wal_level = replica
restore_command = '/usr/local/bin/wal-g-pg wal-fetch "%f" "%p" --config /etc/postgresql/15/main/.walg.json >> /var/log/postgresql/restore_command.log 2>&1'
- Для создания полной резервной копии базы данных выполните команду:
sudo -u postgres /usr/local/bin/wal-g-pg backup-push --config /etc/postgresql/15/main/.walg.json /var/lib/postgresql/15/main/
Для восстановления базы данных из резервной копии с помощью WAL-G:
Начало внимание
Восстановление из резервной копии должно производиться в пустую базу данных. Предварительно убедитесь, что у вас есть резервная копия удаляемой БД. Только после этого приступайте к удалению. Подробнее об этом читайте в статье «PostgreSQL».
Конец внимание
- Остановите PostgreSQL, если он запущен:
sudo systemctl stop postgresql
- Переместите или удалите содержимое директории
/var/lib/postgresql/15/main
:
sudo mv /var/lib/postgresql/15/main /var/lib/postgresql/15/main_old
- Создайте пустую директорию для восстановления:
sudo mkdir /var/lib/postgresql/15/main
sudo chown postgres:postgres /var/lib/postgresql/15/main
- Для просмотра списка резервных копий баз данных выполните команду:
sudo -u postgres /usr/local/bin/wal-g-pg backup-list --config /etc/postgresql/15/main/.walg.json
- Выполните команду восстановления:
sudo -u postgres /usr/local/bin/wal-g-pg backup-fetch /var/lib/postgresql/15/main LATEST --config /etc/postgresql/15/main/.walg.json
Здесь LATEST
указывает на последнюю резервную копию, либо можно ввести наименование нужной копии, полученной из списка на предыдущем шаге, например: base_000000010000000000000009.
- Запустите PostgreSQL:
sudo systemctl start postgresql
Настройка WAL-G для MongoDB
Для резервного копирования данных с помощью WAL-G выполните следующие действия:
- Предварительно установите WAL-G с официального GitHub-репозитория:
wget https://github.com/wal-g/wal-g/releases/download/v3.0.5/wal-g-mongo-ubuntu-22.04-amd64.tar.gz
tar -xzf wal-g-mongo-ubuntu-22.04-amd64.tar.gz
sudo mv wal-g-mongo-ubuntu-22.04-amd64 /usr/local/bin/wal-g-mongo
- Настройте переменные окружения для доступа к облачному хранилищу. Откройте файл конфигурации
/home/user/.walg.json
и добавьте следующие параметры:
{
"WALG_S3_PREFIX": "s3://elma365-backup/mongo",
"AWS_ENDPOINT": "https://storage.yandexcloud.net",
"AWS_ACCESS_KEY_ID": "<your-access-key-id>",
"AWS_SECRET_ACCESS_KEY": "<your-secret-access-key>",
"AWS_REGION": "us-east-1",
"AWS_S3_FORCE_PATH_STYLE": "true",
"WALG_COMPRESSION_METHOD": "brotli",
"MONGODB_URI": "mongodb://superuser:SecretPassword@mongodb-server.your_domain:27017/?authSource=admin&connect=direct&socketTimeoutMS=60000&connectTimeoutMS=10000",
"WALG_STREAM_CREATE_COMMAND": "mongodump --archive --oplog --uri='mongodb://superuser:SecretPassword@mongodb-server.your_domain:27017/?authSource=admin&connectTimeoutMS=10000'",
"WALG_STREAM_RESTORE_COMMAND": "mongorestore --archive --oplogReplay --uri='mongodb://superuser:SecretPassword@mongodb-server.your_domain:27017/?authSource=admin&connectTimeoutMS=10000'"
}
Здесь:
WALG_S3_PREFIX
— указывает путь к S3, где будут храниться резервные копии и .WAL-файлы (Write-Ahead Logs);AWS_ENDPOINT
— указывает точку доступа (endpoint) для S3-совместимого хранилища;AWS_ACCESS_KEY_ID
— идентификатор ключа доступа (Access Key ID) для аутентификации в S3-совместимом хранилище;AWS_SECRET_ACCESS_KEY
— секретный ключ (Secret Access Key) для аутентификации в S3-совместимом хранилище;AWS_REGION
— регион, в котором находится S3-совместимое хранилище;AWS_S3_FORCE_PATH_STYLE
— указывает, что нужно использовать path-style для доступа к S3-бакетам;WALG_COMPRESSION_METHOD
— метод сжатия, используемый для резервных копий. В данном случае используется алгоритмBrotli
, который обеспечивает хорошее соотношение между степенью сжатия и скоростью;MONGODB_URI
— URI для подключения к MongoDB;WALG_STREAM_CREATE_COMMAND
— команда, используемая WAL-G для создания резервной копии MongoDB;ALG_STREAM_RESTORE_COMMAND
— команда, используемая WAL-G для восстановления резервной копии MongoDB.
- Для создания полной резервной копии баз данных выполните команду:
/usr/local/bin/wal-g-mongo backup-push --config /home/user/.walg.json
- Для просмотра списка резервных копий баз данных выполните команду:
/usr/local/bin/wal-g-mongo backup-lis --config /home/user/.walg.json
Для восстановления базы данных из резервной копии выполните команду:
/usr/local/bin/wal-g-mongo backup-fetch LATEST --config /home/user/.walg.json
Начало внимание
Восстановление из резервной копии должно производиться в пустую базу данных. Предварительно убедитесь, что у вас есть резервная копия удаляемой базы данных. Только после этого приступайте к удалению БД. Подробнее об этом читайте в статье «MongoDB».
Конец внимание
Здесь LATEST
указывает на последнюю резервную копию, либо можно указать наименование нужной копии, полученной из списка на предыдущем шаге, например: stream_20250214T093724Z.
Настройка Rclone
Для установки Rclone используйте команду:
sudo -v ; curl https://rclone.org/install.sh | sudo bash
Чтобы настроить Rclone для работы с S3:
- Запустите команду для настройки нового S3-хранилища:
rclone config
- В открывшемся окне выберите опцию n для создания нового хранилища.
- Введите имя для вашего хранилища. Например source-s3 для исходного хранилища и backup-s3 для целевого.
- Выберите тип хранилища (s3).
- Выберите провайдера (Other).
- Введите параметры доступа к вашему S3-хранилищу:
access_key_id
— ваш идентификатор ключа доступа;secret_access_key
— ваш секретный ключ;region
— регион вашего S3-хранилища;endpoint
— укажите точку доступа S3-хранилища.
- Повторите шаги для настройки второго S3-хранилища.
Для копирования данных из одного S3-хранилища в другое используйте команду rclone copy
:
rclone copy source-s3:bucket-name/path backup-s3:backup-bucket-name/path -v --ignore-errors --fast-list --checksum
Здесь:
source-s3
— имя удалённого хранилища, настроенного для исходного S3;bucket-name/path
— имя бакета и путь к данным в исходном хранилище;backup-s3
— имя удалённого хранилища, настроенного для целевого S3;backup-bucket-name/path
— имя бакета и путь для резервной копии в целевом хранилище;-v
— включает подробный вывод (verbose mode);--ignore-errors
— игнорирует ошибки, возникающие во время выполнения команды;--fast-list
— ускоряет процесс создания списка файлов и директорий, особенно при работе с облачными хранилищами, такими как S3, Google Drive и другими;--checksum
— включает проверку контрольных сумм (хешей) файлов при копировании или синхронизации.