Резервное копирование баз данных PostgreSQL и MySQL
Резервное копирование (бэкап) баз данных — это одна из важнейших процедур для обеспечения безопасности и надёжности работы сайтов и приложений. Потеря данных может произойти по множеству причин: сбой сервера, ошибка администратора, обновление, вирус, или просто человеческий фактор. Регулярные резервные копии позволяют быстро восстановить работу проекта без потерь.
В этом руководстве подробно рассмотрим, как выполнять резервное копирование баз данных PostgreSQL и MySQL, как сохранять бэкапы на удалённый сервер Linux с помощью rsync или scp, а также как отправлять их в облачные хранилища через rclone.
Резервное копирование PostgreSQL
Для PostgreSQL используется стандартная утилита pg_dump, которая позволяет создать полную копию базы данных в виде SQL-файла.
Пример создания бэкапа:
pg_dump -U myuser -h localhost mydatabase > /backup/mydatabase_$(date +%F).sql
Пояснение параметров:
- -U myuser — имя пользователя базы данных;
- -h localhost — адрес сервера (если база находится локально, можно опустить);
- mydatabase — имя базы данных;
- /backup/... — путь, куда сохраняется копия;
- $(date +%F) — добавляет текущую дату к имени файла.
Чтобы сэкономить место, файл можно сразу сжать:
pg_dump -U myuser mydatabase | gzip > /backup/mydatabase_$(date +%F).sql.gz
Для резервного копирования всех баз данных на сервере:
pg_dumpall -U myuser | gzip > /backup/postgres_all_$(date +%F).sql.gz
Резервное копирование MySQL
Для MySQL и MariaDB используется утилита mysqldump.
Пример создания бэкапа одной базы данных:
mysqldump -u myuser -p mydatabase > /backup/mydatabase_$(date +%F).sql
При выполнении команды система запросит пароль пользователя user.
Чтобы создать архив всех баз данных:
mysqldump -u myuser -p --all-databases | gzip > /backup/mysql_all_$(date +%F).sql.gz
Если необходимо включить хранимые процедуры и триггеры, добавьте опцию --routines --triggers.
Резервное копирование на CloudBox
CloudBox от INTROSERV — облачное хранилище с поддержкой множества протоколов подключения (в том числе rsync, scp, rsync через SSH, WebDAV). Простота использования CloudBox значительно облегчает задачи по загрузке, управлению и извлечению данных.
Вы можете использовать его как удалённый пункт для хранения резервных копий ваших баз данных. Ниже — подробности по настройке и примеры скриптов.
Шаг 1. Получение доступа к CloudBox
Закажите один из доступных тарифных планов CloudBox на нашем сайте — https://introserv.com/ru/solutions/cloudbox/
После оплаты сервис становится доступен в течение нескольких минут. После активации услуги вы получите данные для подключения:
- адрес сервера (box$$$$$.introserv.cloud)
- имя пользователя (box$$$$$) и пароль
Шаг 2. Подключение и синхронизация с помощью rsync или scp
Использование rsync (рекомендуется):
rsync -avz -e "ssh -p 22" /backup/ user@cloudbox-server:/path_to_cloudbackups/
Где:
- user — имя пользователя CloudBox;
- cloudbox-server — адрес подключения;
- /path_to_cloudbackups/ — путь на CloudBox.
Для автоматической работы желательно настроить SSH-ключи.
1) Создайте публичный ключ:
ssh-keygen -t rsa
2) Скопируйте содержимое файла публичного ключа, который был создан, например, /root/.ssh/id_rsa.pub в буфер обмена.
3) Перейдите в раздел "Profile" (навести курсор на иконку пользователя справа вверху), добавьте содержимое ключа в поле "Public keys" и сохраните настройки.


После чего rsync будет работать без ввода пароля, что удобно для cron-задач.
Альтернатива — scp:
scp /backup/mysql_mydatabase.sql.gz user@cloudbox-server:/path_to_cloudbackups/
Шаг 3. Подключение и синхронизация с помощью rclone
Если вы хотите использовать rclone для взаимодействия с CloudBox, выполните настройку следующим образом.
1) Установите rclone:
sudo apt install rclone
2) Запустите конфигурацию:
rclone config
При настройке выберите:
- n — для создания нового подключения;
- название, например
cloudbox; - тип хранилища — выберите
sftpилиssh; - введите адрес сервера формата
box$$$$$.introserv.cloud, имя пользователя форматаbox$$$$$, порт (в данном случае порт SSH — по умолчанию 22), путь к директории; - выполните авторизацию (если требуется).
Проверьте подключение:
rclone ls cloudbox:/path_to_cloudbackups/
Копирование резервных данных:
rclone copy /backup/ cloudbox:/db-backups/ --progress
Синхронизация с удалением отсутствующих локально файлов:
rclone sync /backup/ cloudbox:/db-backups/ --progress
Если нужно — зашифруйте файлы перед передачей:
rclone copy /backup/ cloudbox:/db-backups/ --progress --crypt
Шаг 4. Пример автоматизации скрипта с CloudBox
Создайте скрипт /usr/local/bin/db_backup_cloudbox.sh, например:
#!/bin/bash DATE=$(date +%F) BACKUP_DIR="/backup/$DATE" mkdir -p $BACKUP_DIR # PostgreSQL pg_dump -U myuser mydatabase | gzip > $BACKUP_DIR/postgres_mydatabase.sql.gz # MySQL mysqldump -u myuser -p mydatabase | gzip > $BACKUP_DIR/mysql_mydatabase.sql.gz # Upload to CloudBox rsync -avz -e "ssh -p 22" $BACKUP_DIR/ user@cloudbox-server:/path_to_cloudbackups/$DATE/ # Upload to CloudBox (rclone option, uncomment if used) # rclone copy $BACKUP_DIR/ cloudbox:/db-backups/$DATE/ --progress # Remove backups older than 7 days find /backup/ -type f -mtime +7 -delete
Затем добавьте cron-задачу (в примере скрипт запускается ежедневно, один раз в сутки, в 2 часа ночи):
0 2 * * * /usr/local/bin/db_backup_cloudbox.sh
Что важно учитывать:
- Убедитесь, что соединение с CloudBox стабильно и пропускная способность достаточная.
- Настройте мониторинг: убедитесь, что файлы действительно копируются.
- Периодически проверяйте восстановление из CloudBox-копий.
- При использовании конфиденциальных данных — рассмотрите шифрование резервных копий.
Копирование на удалённый сервер Linux по SSH
Если вы хотите хранить резервные копии не только локально, но и на другом сервере, можно использовать rsync или scp.
Использование rsync (предпочтительный способ, так как копирует только изменения):
rsync -avz -e "ssh -p 22" /backup/ [email protected]:/remote_backups/
Пояснение параметров:
- user — имя пользователя на удалённом сервере;
- remote.server — IP-адрес или доменное имя сервера;
- /remote_backups/ — путь для хранения резервных копий.
Для работы без ввода пароля можно настроить SSH-ключи.
Генерация ключей:
ssh-keygen -t rsa
Копирование ключа на удалённый сервер:
ssh-copy-id [email protected]
После этого rsync будет работать автоматически без запроса пароля, что удобно для cron-задач.
Альтернатива rsync — использование утилиты scp:
scp /backup/mysql_mydb.sql.gz [email protected]:/remote_backups/
Копирование в стороннее облачное хранилище через rclone
Если требуется хранить резервные копии в облаке (Google Drive, Dropbox, Amazon S3 и другие), удобно использовать rclone — универсальную утилиту для синхронизации данных с различными облачными сервисами.
Установка:
sudo apt install rclone
Настройка:
rclone config
Далее следуйте инструкциям мастера:
- Выберите n для создания нового подключения;
- Введите имя, например
remote; - Выберите тип хранилища (например
s3,drive,dropbox); - Введите ключи доступа или выполните авторизацию через браузер.
Проверить подключение:
rclone ls remote:path
Пример копирования резервных копий в облако:
rclone copy /backup/ remote:db-backups/ --progress
Команда синхронизации (удаляет старые файлы, которых нет локально):
rclone sync /backup/ remote:db-backups/ --progress
Можно также зашифровать файлы перед отправкой:
rclone copy /backup/ remote:db-backups/ --progress --crypt
Безопасность и контроль
- Храните резервные копии минимум в двух местах — локально и удалённо.
- Проверяйте, что копии действительно создаются и успешно загружаются.
- Минимум раз в месяц выполняйте тестовое восстановление.
- Шифруйте файлы с конфиденциальными данными, если используете публичные облака:
gpg -c /backup/mysql_mydatabase.sql.gz
- Следите за правами доступа к каталогу
/backupи паролями от баз данных.
Восстановление базы из резервной копии
PostgreSQL:
gunzip < backup.sql.gz | psql -U myuser -d mydatabase
MySQL:
gunzip < backup.sql.gz | mysql -u myuser -p mydatabase
Заключение
Резервное копирование баз данных PostgreSQL и MySQL — это простая, но критически важная процедура. Даже самая надёжная инфраструктура не защищает от человеческих ошибок и технических сбоев. Оптимальная стратегия — регулярные автоматические бэкапы, их хранение как минимум на одном внешнем сервере и в облаке, а также периодическая проверка возможности восстановления.
Используя комбинацию стандартных инструментов pg_dump, mysqldump, rsync, rclone и cron, можно выстроить надёжную систему резервного копирования без стороннего платного ПО. Это решение легко автоматизируется и подходит для любых Linux-систем.