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
ПростотаБыстроТребует настройки
БезопасностьПароль открытЗащищён
РекомендуетсяТест/локальноПродакшен

Подробнее о синтаксисе событий - в официальной документации.