Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

Linux / DevOps

Автоматический бэкап MySQL в Cron: запуск в 3 ночи и отправка в облако

Обновлено: 27.08.2026 · Официальная документация ↗

Почему ручные бэкапы не работают?

Человеческий фактор — главная причина потери данных. Системные администраторы забывают делать копии перед сбоями. Автоматизация через планировщик Cron гарантирует наличие свежего ночного дампа каждый день.

Схема работы cron-скрипта

ВремяДействиеИнструмент
03:00Создание дампа MySQLmysqldump
03:05Сжатие дампа в архив .gzgzip
03:10Загрузка в S3 / Яндекс Дискrclone / aws cli

Создание bash-скрипта и настройка планировщика

  1. Создаем скрипт резервного копирования:
    sudo nano /usr/local/bin/mysql_backup.sh
  2. Вставляем код скрипта:
    #!/bin/bash
    BACKUP_DIR="/var/backups/mysql"
    DATE=$(date +"%Y-%m-%d_%H-%M")
    DB_USER="backup_user"
    DB_PASS="SecretPass123"
    DB_NAME="my_database"
    
    mkdir -p $BACKUP_DIR
    mysqldump -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db_$DATE.sql.gz
    
    # Удаляем бэкапы старше 7 дней локально:
    find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +7 -delete
  3. Делаем скрипт исполняемым:
    sudo chmod +x /usr/local/bin/mysql_backup.sh
  4. Добавляем задачу в системный планировщик:
    sudo crontab -e
  5. Прописываем запуск каждую ночь в 03:00:
    0 3 * * * /usr/local/bin/mysql_backup.sh > /dev/null 2>&1

Для отправки в S3 используйте бесплатную утилиту rclone, добавив в конец скрипта строку rclone copy $BACKUP_DIR remote:my-bucket/.

💡 Практика специалистов: Никогда не используйте суперпользователя root для скриптов бэкапа. Создавайте отдельную учетную запись СУБД с правами SELECT и LOCK TABLES.

Частые вопросы (FAQ)

Что означает запись 0 3 * * * в cron?

0 минут, 3 часа ночи, каждый день месяца, каждый месяц, каждый день недели.

Как протестировать работу скрипта прямо сейчас?

Запустите его вручную: sudo /usr/local/bin/mysql_backup.sh и проверьте папку /var/backups/mysql.

Почему скрипт работает вручную, но не запускается в cron?

У cron урезанный PATH. Всегда указывайте абсолютные пути к утилитам (/usr/bin/mysqldump, /usr/bin/gzip).

Как создать отдельного пользователя MySQL только для бэкапов?

GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.* TO 'backup_user'@'localhost' IDENTIFIED BY 'пароль';

Полезные материалы
Рекомендуем