Событие 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 " в течение минуты. Но этого не произошло.
Мне нужно что-то дополнительное, чтобы мои события начать работать?
вывод " Показать список процессов":
спасибо.
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 '';
убедитесь, что ваш определитель имеет правильные привилегии.
Я только что понял, что на 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 ;