Подключение к VDS по SSH: PuTTY, терминал и SSH-ключи
Пошаговое руководство по SSH-подключению к Linux VDS: PuTTY, терминал, аутентификация по ключу, правило фильтрации Path Panel и советы по безопасности.
Резервное копирование и восстановление MySQL и PostgreSQL с помощью mysqldump и pg_dump. Автоматические бэкапы через cron, процедуры восстановления и лучшие практики.
Резервное копирование баз данных — одна из важнейших задач администрирования серверов. Регулярные бэкапы необходимы для восстановления после аппаратных сбоев, ошибок пользователей или кибератак. В этом руководстве рассматриваются процедуры резервного копирования и восстановления для MySQL и PostgreSQL.
Без резервных копий потеря данных необратима. Следуйте правилу 3-2-1: 3 копии, 2 разных носителя, 1 удалённое хранилище.
# Резервная копия одной базы данных
mysqldump -u root -p имя_базы > backup.sql
# С паролем (для скриптов)
mysqldump -u root -pПАРОЛЬ имя_базы > backup.sql
# Резервная копия всех баз данных
mysqldump -u root -p --all-databases > all_databases.sql
# Резервная копия конкретных таблиц
mysqldump -u root -p имя_базы таблица1 таблица2 > tables.sql
# Сжатая резервная копия
mysqldump -u root -p имя_базы | gzip > backup_$(date +%Y%m%d).sql.gz
# Согласованная резервная копия для больших баз данных
mysqldump -u root -p \
--single-transaction \
--routines \
--triggers \
--events \
имя_базы > full_backup.sql
# Только структура (без данных)
mysqldump -u root -p --no-data имя_базы > schema.sql
# Только данные (без структуры)
mysqldump -u root -p --no-create-info имя_базы > data.sql
# Резервная копия с удалённого сервера
mysqldump -h remote_server -u user -p имя_базы > remote_backup.sql
# Восстановление из SQL-файла
mysql -u root -p имя_базы < backup.sql
# Восстановление из сжатой резервной копии
gunzip -c backup.sql.gz | mysql -u root -p имя_базы
# Создание новой базы и восстановление
mysql -u root -p -e "CREATE DATABASE new_database;"
mysql -u root -p new_database < backup.sql
# Восстановление всех баз данных
mysql -u root -p < all_databases.sql
# Создание ~/.my.cnf
nano ~/.my.cnf
[client]
user=root
password=ВАШ_ПАРОЛЬ
host=localhost
# Ограничение прав доступа к файлу
chmod 600 ~/.my.cnf
# Теперь можно использовать без ввода пароля
mysqldump имя_базы > backup.sql
# Резервная копия одной базы данных
pg_dump -U postgres имя_базы > backup.sql
# Сжатый пользовательский формат (рекомендуется)
pg_dump -U postgres -Fc имя_базы > backup.dump
# Формат каталога (для параллельного восстановления)
pg_dump -U postgres -Fd имя_базы -f backup_dir/
# Резервная копия всех баз данных (включая роли)
pg_dumpall -U postgres > all_pg.sql
# Сжатая резервная копия
pg_dump -U postgres имя_базы | gzip > backup_$(date +%Y%m%d).sql.gz
# Восстановление из SQL-формата
psql -U postgres имя_базы < backup.sql
# Восстановление пользовательского формата (.dump)
pg_restore -U postgres -d имя_базы backup.dump
# Параллельное восстановление (быстрее)
pg_restore -U postgres -d имя_базы -j 4 backup.dump
# Создание новой базы и восстановление
psql -U postgres -c "CREATE DATABASE new_database;"
pg_restore -U postgres -d new_database backup.dump
nano ~/.pgpass
# Формат: host:port:database:user:password
localhost:5432:*:postgres:ВАШ_ПАРОЛЬ
chmod 600 ~/.pgpass
#!/bin/bash
# Конфигурация
DB_USER="root"
DB_PASS="ВАШ_ПАРОЛЬ"
DB_NAME="имя_базы"
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7
# Создание директории для резервных копий
mkdir -p $BACKUP_DIR
# Создание резервной копии
mysqldump -u $DB_USER -p$DB_PASS \
--single-transaction \
--routines \
--triggers \
$DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz
# Удаление старых резервных копий
find $BACKUP_DIR -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
echo "Резервное копирование завершено: ${DB_NAME}_${DATE}.sql.gz"
# Сделать скрипт исполняемым
chmod +x /root/scripts/mysql-backup.sh
# Добавить в crontab (каждую ночь в 02:00)
crontab -e
0 2 * * * /root/scripts/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1
# Копирование на удалённый сервер с rsync
rsync -avz /var/backups/mysql/ user@remote-server:/backup/mysql/
# Отправка одного файла с scp
scp /var/backups/mysql/backup.sql.gz user@remote-server:/backup/
# Отправка в облачное хранилище с rclone (S3, Google Drive и т.д.)
rclone copy /var/backups/mysql/ remote:bucket-name/mysql/
# Проверка размера файла резервной копии
ls -lh /var/backups/mysql/
# Проверка путём восстановления в тестовую базу данных
mysql -u root -p -e "CREATE DATABASE test_restore;"
mysql -u root -p test_restore < backup.sql
mysql -u root -p -e "SHOW TABLES;" test_restore
mysql -u root -p -e "DROP DATABASE test_restore;"
Регулярно тестируйте резервные копии. Резервная копия, которую нельзя восстановить, бесполезна. Выполняйте тестовое восстановление не реже одного раза в месяц.
Регулярное резервное копирование баз данных — важнейшая защита от потери данных. Настроив автоматические скрипты резервного копирования для MySQL и PostgreSQL и храня резервные копии удалённо, вы сможете обеспечить безопасность данных на серверах REXE.
mysqldump — инструмент резервного копирования для MySQL и MariaDB. pg_dump специфичен для PostgreSQL. Оба создают SQL-вывод, но pg_dump также поддерживает пользовательский бинарный формат (-Fc) и формат каталога (-Fd). Бинарный формат обеспечивает более быстрое восстановление и параллельную обработку.
Для MySQL используйте --single-transaction для согласованного резервного копирования таблиц InnoDB. Для PostgreSQL используйте -Fc (пользовательский формат) и pg_restore -j для параллельного восстановления. Для очень больших баз данных рассмотрите Percona XtraBackup (MySQL) или pg_basebackup (PostgreSQL).
Зависит от критичности: ежечасно для электронной коммерции или финансовых данных; ежедневно для блогов или контентных сайтов. Определяйте на основе RPO (целевая точка восстановления). Общая рекомендация: ежедневное полное резервное копирование + ежечасное инкрементальное.
Следуйте правилу 3-2-1: 3 копии, 2 разных типа носителей, 1 удалённое хранилище. Локальный диск + удалённый сервер + облачное хранилище (S3, Backblaze B2) — идеальная комбинация.
С флагом --single-transaction MySQL таблицы InnoDB не блокируются. Таблицы MyISAM могут потребовать кратковременной блокировки. pg_dump PostgreSQL использует MVCC и не блокирует таблицы. Избегайте резервного копирования в часы пик.
Пошаговое руководство по SSH-подключению к Linux VDS: PuTTY, терминал, аутентификация по ключу, правило фильтрации Path Panel и советы по безопасности.
Пошаговое руководство по RDP-подключению к Windows Server VDS: настройка, безопасность NLA, правило фильтрации Path Panel и устранение неполадок.
Смена операционной системы VDS через панель REXE: советы по резервному копированию, поддерживаемые дистрибутивы Linux и версии Windows Server.