Cron средствами MySQL и автоматическое резервное копирование
Удалять старые записи, чистить таблицы, создавать бэкапы - всё это можно делать прямо в mysql без д͏опо͏лнитель͏ных скриптов на PHP или bash.
MySQL - это встроенный план͏ировщ͏ик з͏ад͏ач, ка͏к системный крон, но работающий на уровне база данных.
Когда это удобнее внешнего крон:
- задача касается только данных в БД.
- нет доступа к серверному.
- нужна атомарность - выполнение внутри одной транзакции.
Шаг 1. Проверить и включить
Сначала убедитесь, что планировщик активен:
- SHOW VARIABLES LIKE 'event_scheduler';
| Статус | Значение |
|---|---|
| ON | Готов к работе |
| OFF | Нужно включить |
Запустить командой:
- SET GLOBAL event_scheduler = ON;
Или через конфиг /etc/my.cnf (постоянно):
- ini[mysqld]
- event_scheduler = on
На наших серверах включён по умолчанию. Если на вашем хостинге он отключён - обратитесь в поддержку.
Шаг 2. Создать событие - пример удаления старых логов
Задача: удалять записи старше 3 дней каждые 60 минут.
- DELIMITER ;;
- CREATE EVENT e_delete_logs
- ON SCHEDULE EVERY 60 MINUTE
- COMMENT 'Удаление устаревших логов'
- DO
- BEGIN
- DELETE FROM `namedb`.`logs` WHERE `ltime` <= CURDATE() - 3;
- OPTIMIZE TABLE `namedb`.`logs`;
- END;;
Синтаксис интервалов:
| Интервал | Запись |
|---|---|
| Каждый час | EVERY 1 HOUR |
| Каждый день | EVERY 1 DAY |
| Через 1 час от сейчас | AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR |
| Разово в дату | AT '2025-01-01 03:00:00' |

Шаг 3. Резервное копирование - два cпособа
Способ №1 - данные прямо в команде
bash
- 0 3 * * * mysqldump -u root -pПАРОЛЬ namedb > /backup/mydb_$(date +\%F).sql
Пароль виден в истории процессов - не рекомендуется для продакшена.
Способ №2 - через конфигурационный файл (безопасно)
Создайте ~/.my.cnf:
ini
- [client]
- user=root
- password=ВАШ_ПАРОЛЬ
Права: chmod 600 ~/.my.cnf
Задача:
bash
- 0 3 * * * mysqldump mydb > /backup/mydb_$(date +\%F).sql
Сравнение методов:
| Критерий | Метод №1 | Метод №2 |
|---|---|---|
| Простота | Быстро | Требует настройки |
| Безопасность | Пароль открыт | Защищён |
| Рекомендуется | Тест/локально | Продакшен |
Подробнее о синтаксисе событий - в официальной документации.


