Ежедневный бэкап базы MySQL: dump, gzip и cron
У клиента «бэкапы есть» — в crontab пусто, свежих .sql.gz за месяц нет.
Ниже — рабочий рецепт: ежедневный mysqldump, сжатие, retention и cron.
Под Bitrix / обычный сайт на VPS с MySQL или MariaDB.
Серия «бэкап базы»
- Этот гайд — ежедневный dump
- Проверка дампа — gzip -t, размер, свежесть
- Restore по чеклисту — откат без паники
Отдельно: ловушка «дампы на том же диске» — dump есть, а при смерти диска теряете и прод, и бэкап.
Что нужно до старта
- Root или sudo на VPS.
- Отдельный MySQL-пользователь только на
SELECT/ dump (не root в cron). - Каталог под дампы с местом (лучше не тот же раздел, что data MySQL — см. гайд про диск).
- Пароль не в git и не в открытом crontab:
~/.my.cnfсchmod 600.
Шаг 1 — пользователь для бэкапа
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'СИЛЬНЫЙ_ПАРОЛЬ';
GRANT SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT, ROUTINE ON bitrix.* TO 'backup_user'@'localhost';
FLUSH PRIVILEGES;
bitrix — пример). На MariaDB/MySQL 8 синтаксис GRANT может чуть отличаться — главное: хватает прав на dump без DROP/DELETE.Шаг 2 — скачать скрипт
Готовый файл с комментариями:
Скачать mysql-backup-daily.sh →
Или собрать под свои имена БД/пути:
sudo mkdir -p /var/backups/mysql /usr/local/sbin
sudo curl -fsSL -o /usr/local/sbin/mysql-backup-daily.sh \
https://mediops.ru/tools/scripts/mysql-backup-daily.sh
sudo chmod 750 /usr/local/sbin/mysql-backup-daily.sh
Шаг 3 — настроить переменные
В шапке скрипта или через env:
export DB_NAME=bitrix
export DB_USER=backup_user
export BACKUP_DIR=/var/backups/mysql
export KEEP_DAYS=14
export DEFAULTS_FILE=/root/.my.cnf
Пример ~/.my.cnf:
[client]
user=backup_user
password=СИЛЬНЫЙ_ПАРОЛЬ
host=127.0.0.1
chmod 600 ~/.my.cnf
Шаг 4 — пробный запуск
sudo -E /usr/local/sbin/mysql-backup-daily.sh
ls -lh /var/backups/mysql/
tail -20 /var/backups/mysql/backup.log
Должен появиться файл вида bitrix_20260731_030015.sql.gz, в логе — ok size=….
Шаг 5 — cron
Ночью, когда нагрузка ниже (подстройте час под проект):
sudo crontab -e
# каждый день в 03:15
15 3 * * * DEFAULTS_FILE=/root/.my.cnf DB_NAME=bitrix /usr/local/sbin/mysql-backup-daily.sh
Postgres?
Логика та же: pg_dump → gzip → retention → cron. Команды другие; для Bitrix на VPS чаще MySQL/Maria — поэтому скрипты заточены под них.
Дальше обязательно
Dump без проверки — лотерея. Следующий шаг:
Проверка дампа: gzip -t, размер, свежесть →
И уметь откатить: restore по чеклисту →
Честно про Mediops
Мы не бэкапим вашу базу и не принимаем upload дампов. Бэкап — ваша ответственность + эти скрипты. Mediops заметит косвенно: диск 80%+, сайт недоступен — алерт в почту или мессенджер.
Диск растёт от дампов — увидите вовремя
Бесплатно: метрики VDS + email-алерты по диску и доступности сайта.