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. Резервне копіювання - два способи
Спосіб №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 |
|---|---|---|
| Простота | Швидко | Вимагає настройки |
| Безпека | Пароль відкритий | Захищений |
| Рекомендується | Тест/локально | Продакшен |
Детальніше про синтаксис подій - в офіційній документації.


