Подтвердить что ты не робот

Событие 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" в течение минуты. Но этого не происходит.

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

Вывод "SHOW PROCESSLIST": enter image description here

Спасибо.

4b9b3361

Ответ 1

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

 SET GLOBAL event_scheduler = ON;

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

Ответ 2

Для тех, кто задается вопросом, как включить его по умолчанию при запуске, добавьте в свой файл конфигурации (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 был отключен. В этом случае единственным вариантом является перезапуск службы.

Ответ 3

Убедитесь, что 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, как указано выше.

Ответ 4

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

[mysqld]

# turning on event_scheduler  
event_scheduler=ON

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

sudo service mysql restart

затем проверьте свой список процессов

SHOW PROCESSLIST

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

SELECT * FROM INFORMATION_SCHEMA.events

Ответ 5

Temporal

SET GLOBAL event_scheduler = ON;

Не будет работать, если event_scheduler явно ОТКЛЮЧЕН, см. метод ниже

Постоянный (требуется перезагрузка)

В вашем конфигурационном файле (в Ubuntu это /etc/mysql/mysql.cnf):

[mysqld]
event_scheduler = ON

Примечание:

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

  • OFF (или 0 0) (по умолчанию)
  • ВКЛ. (или 1)
  • ОТКЛЮЧЕНО: вы не можете использовать временное включение, вы можете только изменить состояние через файл конфигурации и перезапустить сервер

ВНИМАНИЕ: Ключевые слова ON/OFF предпочтительнее, чем их числовые эквиваленты. И фактически Mysql Workbench не распознает конфигурацию event_scheduler=1, он отображается как OFF в разделе файла опций. Протестировано в Ubuntu с Mysql Workbench 8.0.17 и Mysql Server 5.7.27

Хотя ON и OFF имеют числовые эквиваленты, значение отображается для event_scheduler с помощью SELECT или SHOW VARIABLES всегда один из ВЫКЛ, ВКЛ или ОТКЛЮЧЕНО. DISABLED не имеет числового значения эквивалент. По этой причине обычно предпочтительнее использовать ON и OFF. более 1 и 0 0 при установке этой переменной.

Источник: https://dev.mysql.com/doc/refman/5.7/en/events-configuration.html

Ответ 6

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

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

Убедитесь, что ваш определитель имеет правильные ПРИВИЛЕГИИ.

Ответ 7

Не забудьте добавить " Commit", после " DO BEGIN" или " DO". Работает для меня после этого.

Ответ 8

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

 SET GLOBAL event_scheduler = OFF;

а затем

 SET GLOBAL event_scheduler = ON;

чтобы заставить его фактически перевести планировщик в "ожидание активации" -state.

Ответ 9

Try

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 ;