Событие Mysql Не Работает

Я добавил следующее простое тестовое событие в мою базу данных mysql через phpmyadmin:

CREATE DEFINER=`root`@`localhost` EVENT `my_event` 
ON SCHEDULE EVERY 1 MINUTE STARTS '2013-05-27 00:00:00' 
ON COMPLETION NOT PRESERVE ENABLE DO 
BEGIN
    UPDATE `test` SET `name`="z";
END

моя среда-mac + MAMP Pro. Я ожидаю изменить все строки в моей таблице "test" с именем " z " в течение минуты. Но этого не произошло.

Мне нужно что-то дополнительное, чтобы мои события начать работать?

вывод " Показать список процессов": enter image description here

спасибо.

8 ответов


события запускаются планировщиком, который по умолчанию не запускается. Используя SHOW PROCESSLIST можно проверить, запущен ли он. Если нет, выполните команду

 SET GLOBAL event_scheduler = ON;

, чтобы запустить его.


для тех, кто интересуется, как включить его по умолчанию при запуске, добавьте следующее в файл конфигурации (my.ini, my.cnf):

#Event scheduler can be set to 1 (On), 0 (Off), or Disabled
event_scheduler=1

в этом случае требуется перезапуск службы, поэтому, если вы хотите минимальное нарушение, добавьте это в файл конфигурации, а затем запустите SQL:

SET GLOBAL event_scheduler = ON;

таким образом, он будет работать для текущего процесса, и если сервер будет перезапущен, он все равно будет работать.

обратите внимание, что это не работает, если event_scheduler был установлен в нетрудоспособный. В этом случае единственный вариант-перезапустить службу.


проверьте, включен ли event_scheduler-выполните следующую команду:

SHOW PROCESSLIST;

он выведет таблицу / записи, вы должны искать запись с пользователей event_scheduler и команда Daemon:

Id           User         Host      db  Command Time    State            Info
22870   event_scheduler localhost   \N   Daemon  23    Waiting for next activation  \N

или вы также можете проверить, используя следующую команду:

SELECT @@global.event_scheduler;

результат должен быть ON, иначе он взорвется (будет 0 для команды), как указано в следующем раздел.


если у вас нет такой записи (как указано выше), вы можете запустить планировщик событий, используя следующую команду:

 SET GLOBAL event_scheduler = ON;

после этого вы можете проверить, правильно ли он был выполнен с помощью SHOW PROCESSLIST команда, как упоминалось выше.


Я просто хотел бы добавить в этот поток. Я сбросил свою базу данных на другой сервер, и в результате определитель моего события не имел такого гранта, определенного для пользователя. Я обновил свой определитель с

ALTER DEFINER='root'@'localhost' EVENT event.name COMMENT '';

убедитесь, что ваш определитель имеет правильные привилегии.


Не забудьте добавить в 'Commit', после 'НАЧИНАЮТСЯ' или ' DO'. После этого работает на меня.


Я только что понял, что на MariaDB, после добавления события (в моем случае это было первое), вы должны перезапустить планировщик событий

 SET GLOBAL event_scheduler = OFF;

а то

 SET GLOBAL event_scheduler = ON;

чтобы сделать это, фактически приведите планировщик в состояние"ожидание активации".


если вы хотите event_scheduler для автоматического запуска при каждом перезапуске сервера mysql, в любом месте под на my.ini или my.cnf файл, который вы найдете в /etc/mysql вы должны

[mysqld]

# turning on event_scheduler  
event_scheduler=ON

перезапустите mysql, чтобы проверить, работает ли он (в терминале командной строки!)

sudo service mysql restart

затем проверьте свой processlist

SHOW PROCESSLIST

вы можете проверить, запущены ли ваши события, проверив последний раз, когда они запускались

SELECT * FROM INFORMATION_SCHEMA.events

попробовать

SET GLOBAL event_scheduler = ON;
DELIMITER $$
CREATE DEFINER=`root`@`db01` EVENT `PRICEALERT_STATUS` 
ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE) 
DO BEGIN
// Your Query
END $$
DELIMITER ;