EUR
european

EUR

usa

USD

Russian Ru
Ex. VAT Ex. VAT 0%

Резервное копирование баз данных 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" и сохраните настройки.

CloudBox profile settings
CloudBox public keys field

После чего 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

Далее следуйте инструкциям мастера:

  1. Выберите n для создания нового подключения;
  2. Введите имя, например remote;
  3. Выберите тип хранилища (например s3, drive, dropbox);
  4. Введите ключи доступа или выполните авторизацию через браузер.

Проверить подключение:

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-систем.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA