2013-05-27 2 views
33

Я добавил следующее простое событие тест на моей базе данных MySQL с помощью PHPMyAdmin:Mysql Событие Не Рабочая

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 

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

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

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

Спасибо.

+0

Можете ли вы предоставить результаты запроса 'SHOW PROCESSLIST;'? Возможно, планировщик не запущен. – Jacopofar

+0

только что добавил вывод к моему описанию вопроса. Я не сделал ничего, чтобы запустить планировщик. Как начать это, пожалуйста? – Rana

ответ

80

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

SET GLOBAL event_scheduler = ON; 

для запуска.

+0

Спасибо. Теперь работает. – Rana

+1

Хорошо! Вам не нужно было перезапускать сервер MySQL, верно? – Jacopofar

+2

Да, правильно, мне не пришлось. – Rana

-1

Попробуйте

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 ; 
+0

Это не будет работать, потому что событие должно запускаться первым для включения этого event_scheduler. – earl3s

4

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

0

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

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

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

3

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

SHOW PROCESSLIST; 

Это будет выводить таблицы/записи, вы должны искать записи с пользователяevent_scheduler и CommandDaemon:

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, как указано выше.

0

Не забудьте добавить в 'Commit', после того, как 'DO НАЧАТЬ' или 'DO. Работает для меня после этого.

0

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

SET GLOBAL event_scheduler = OFF; 

, а затем

SET GLOBAL event_scheduler = ON; 

, чтобы заставить его на самом деле принести планировщик в состояние «ожидание активации».

0

Если вы хотите, чтобы ваш event_scheduler для запуска автоматически каждый раз, когда перезагружается сервер MySQL, в любом месте под [mysqld] части 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