Скрипт автоматического создания бэкапов базы данных

Потеря данных из-за сбоя БД обходится бизнесу в среднем от 50 000 до 500 000 рублей за час простоя, если нет актуального бэкапа. Ручное копирование исключено: человеческий фактор приводит к пропуску резервного копирования в 30% случаев при графике «раз в неделю».

Почему mysqldump — стандарт индустрии

Для баз данных объемом до 10-15 ГБ утилита mysqldump остается оптимальным решением. Она создает логический бэкап в формате SQL, который совместим с 99% хостингов. Главный риск здесь — блокировка таблиц (lock tables), которая может остановить запись в БД на 2-5 минут при дампе базы в 2 ГБ, что недопустимо для высоконагруженных проектов.

Чтобы избежать простоя, использую флаг --single-transaction для InnoDB. Это позволяет делать консистентный бэкап без остановки сайта. Мой опыт показывает, что переход на этот метод снижает количество жалоб пользователей на «зависание» сайта во время бэкапа до нуля.

Архитектура надежного PHP-скрипта

Правильный скрипт не должен просто вызывать команду; он обязан управлять жизненным циклом файла. Обязательный стек: exec() для вызова dump, gzip для сжатия (экономия места в 5-7 раз) и функция unlink() для ротации старых копий. Хранить более 7-10 ежедневных бэкапов на том же сервере — стратегическая ошибка, так как при вылете диска вы теряете и данные, и копии.

Кейс: проект с БД на 4 ГБ занимал 12 ГБ места при хранении 3-х копий без сжатия. После внедрения gzip размер упал до 1.2 ГБ на копию. Вывод: автоматическая ротация с лимитом в 5 последних файлов — золотой стандарт для малого и среднего бизнеса.

Автоматизация через Cron и права доступа

Запуск скрипта вручную бесполезен. Настройка Cron на интервал раз в 24 часа (например, в 03:00, когда трафик падает на 60-80%) — база автоматизации. Критическая ошибка новичков: хранение пароля от БД в открытом виде в .php файле с правами 777. Это открывает доступ к данным любому пользователю сервера.

Решение: использование файла .my.cnf в домашней директории пользователя с правами 600. В этом случае скрипт обращается к конфигу, а пароль не светится в списке процессов (ps aux), что закрывает одну из главных дыр в безопасности.

Транспортировка данных на внешние хранилища

Локальный бэкап — это не бэкап, а временная копия. Для реальной защиты данные должны улетать на удаленный сервер или в S3-хранилище. Стоимость S3-хранилища (например, Selectel или AWS) составляет от 1 до 5 рублей за ГБ, что ничтожно мало по сравнению с риском потери базы.

Практика показывает, что передача через rsync или curl API сокращает время восстановления (RTO) с 4-6 часов до 30-40 минут. Если вы используете готовые скрипты на PHP, убедитесь, что в них реализован метод передачи по SSH/SFTP, а не через незащищенный FTP.

Вывод

Для проектов с БД до 20 ГБ выбирайте связку mysqldump + gzip + Cron + удаленное S3-хранилище. Избегайте встроенных плагинов CMS (WordPress/Bitrix), так как они создают избыточную нагрузку на PHP-интерпретатор и часто «падают» по таймауту на больших объемах. Начинайте с настройки .my.cnf для безопасности и автоматизируйте ротацию файлов, чтобы не забить дисковое пространство за неделю.

Шире вопрос разобран в основной статье Готовые скрипты и решения на PHP.

VK
Pinterest
Telegram
WhatsApp
OK
Прокрутить вверх