Cron средствами mysql

Блог им. LiO /
Была задача: есть база и в нее добавляются логии действий. В таблице есть «дата действия» и само «действие». Нужно было удалять старые логи, старше 3х дней

Можно было решить простым кроном в php исполнении или на другом языке, но есть более изящный метод. Средствами самого mysql, его «кроном». Точнее «действием»


«Действие» запускается по интервалу или в определенную дату. Может быть цикличным или «разовым».

В «действии» можно вставить сам sql код или ссылку на функцию

Для того что бы «действие» заработало, нужно что бы заработал демон расписания (event_scheduler). Проверить это можно по статусу переменной

show variables like 'event_scheduler';


если она отключена, попросите хостинг компанию ее включить. На наших хостинг-серверах она включена. Включить можно командами

SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;


Или лучше через конфиг файл /etc/my.cnf

[mysqld]
event_scheduler = on


Задать интервал

К примеру
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR

Каждый час с текущей даты

Или
EVERY 1 DAY

Каждый день

Ну и пример самого кода

DELIMITER ;;


CREATE EVENT e_delllogs
    ON SCHEDULE
      EVERY 60 MINUTE
    COMMENT 'Удаление старых логов'
    DO
BEGIN
delete FROM `user111`.`table` where `ltime`<=CURDATE()-3;
OPTIMIZE TABLE `user111`.` table `;
END;;


Удаление

DROP EVENT `e_delllogs `;


Более легкий способ через phpMyAdmin сделать все тоже самое, без sql кода



Подробнее о синтаксисе можно ознакомится на оф.сайте dev.mysql.com/doc/refman/5.7/en/create-event.html

Оригинал статьи www.hosthouse.kz/articles/185.html

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.