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

Детальніше про синтаксис подій - в офіційній документації.