• Post category:Настройки
  • Запись изменена:12.08.2025

Резервное копирование почтового сервера на базе данных PostgreSQL

1. Создаем директорию для резервной копии

Директория может быть любой. Путь /mnt/backup-mail будет рассмотрен далее при инсталляции.

mkdir /mnt/backup

2. Создание бэкапа БД

Создадим файл backup_file.sql (дамп базы данных):

cd /mnt
sudo -u postgres pg_dump -U postgres -d postfix -F c -c -f /var/lib/postgresql/backup.sql
mv /var/lib/postgresql/backup.sql /mnt/backup/backup.sql

3. Архивируем конфигурационные файлы и БД

В зависимости от типа ОС, будет сохранен только один конфигурационный файл SpamAssassin:

  • /etc/spamassassin/local.cf — для deb дистрибутивов;
  • /etc/mail/spamassassin/local.cf — для rpm дистрибутивов.
tar czvf /mnt/backup/backup-mail.tar.gz --selinux /etc/postfix/main.cf /etc/postfix/master.cf /etc/postfix/tls_policy_maps /etc/postfix/mysql/ /etc/dovecot/ /etc/ssl/mail_cert.pem /etc/ssl/mail_key.pem /etc/spamassassin/local.cf /etc/mail/spamassassin/local.cf /etc/opendkim /mail/ /mnt/backup/backup.sql

4. Переносим архив на бэкапный или новый сервер почты

Для переноса архива backup-mail.tar.gz на новый сервер c использованием SSH, вы можете к примеру воспользоваться командой scp (Secure Copy):

scp backup-mail.tar.gz user@ip_new_server:/path/to/destination/

Где:

  • backup-mail.tar.gz — имя архива;
  • user — имя пользователя на сервере ip_new_server;
  • /path/to/destination/ — путь к целевой директории на сервере, куда вы хотите скопировать архив.

Вам будет предложено ввести пароль пользователя на сервере ip_new_server для завершения операции копирования. Убедитесь, что у вас есть права доступа и правильные учетные данные пользователя для выполнения команды scp.

Также для ежедневного резервного копирования БД можно использовать следующий подход

Создайте скрипт для выполнения резервного копирования БД.

Для этого нужно создать файл с расширением .sh, например, backup_db.sh:

vi backup_db.sh

И добавить в него следующее содержимое, где DB_PASS= пароль от базы данных:

#!/bin/bash
Задаём переменные для подключения к базе данных
DB_USER="root"
DB_PASS="password"
DB_NAME="postfix"

Определите путь и имя файла для сохранения дампа БД
BACKUP_DIR="/tmp"
DB_DUMP_FILE="${BACKUP_DIR}/postfix.sql"

Создаём дамп БД
mysqldump -u ${DB_USER} -p${DB_PASS} ${DB_NAME} > ${DB_DUMP_FILE}

Сохраните скрипт и убедитесь, что он имеет права на выполнение:

chmod +x backup_db.sh

Добавьте выполнение скрипта в ежедневный планировщик (cron).

Для этого откройте файл /etc/cron.daily/backup_db для редактирования:

vi /etc/cron.daily/backup_db

Добавьте следующую строку, чтобы запланировать выполнение резервного копирования каждый день:

#!/bin/bash
/path/to/your/backup_db.sh

Замените /path/to/your/backup_db.sh на полный путь к вашему скрипту backup_db.sh, который вы создали в первом шаге.

Сохраните файл и убедитесь, что он имеет права на выполнение:

chmod +x /etc/cron.daily/backup_db

Теперь резервное копирование БД будет выполняться ежедневно автоматически.

Восстановлению почтового сервера из резервной копии на базе данных PostgreSQL

1. Выполните установку почтового сервера, согласно инструкции

https://nct.r7-office.ru/doc.html?uid=342bcfa8-c3df-4d6c-b6aa-029f039477b6_433625
https://nct.r7-office.ru/doc.html?uid=08b87968-26a5-433a-8748-85d102d46b48_427489
https://nct.r7-office.ru/doc.html?uid=d88010f2-5254-441d-a57d-5e87aa6acff8_426816
https://nct.r7-office.ru/doc.html?uid=22b69614-87d1-4fc1-a42f-32e56c81b975_426817

2. Распакуйте архив с бэкапом

Произведите распаковку архива из директории куда он был загружен:

tar xzvf backup-mail.tar.gz --selinux -C /

3. Восстановите базу данных

Обновите базу до состояния выгрузки:

sudo -u postgres pg_restore -v -d postfix -c -j 1 -F c /mnt/backup/backup.sql

4. Произведите перезагрузку сервисов

sudo systemctl restart opendkim
sudo systemctl restart spamassassin
sudo systemctl restart mariadb
sudo systemctl restart dovecot
sudo systemctl restart postfix

 

Была ли полезна статья?
Позвольте нам стать лучше