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

Мая сярод Макінтош + MAMP Pro. Я чакаю, каб змяніць усе радкі на маім стале «тэст» з імем "г" на працягу хвіліны. Але не адбываецца так.

Ці павінна я нешта дадатковае, каб мае падзеі пачынаюць працаваць?

Output of "SHOW PROCESSLIST": enter image description here

Дзякуючы.

37
толькі дадаў выхад да майго апісанню пытання. Я нічога, каб пачаць планавальнік не рабіць. Як пачаць гэта, калі ласка?
дададзена аўтар Rana, крыніца
Ці можаце вы прадставіць вынікі запыту SHOW PROCESSLIST; ? Можа быць, планавальнік не запускаецца.
дададзена аўтар Jacopofar, крыніца

8 адказы

Падзеі выконваюцца планавальнікам, які не запускаецца па змаўчанні. Выкарыстанне SHOW PROCESSLIST можна праверыць, запушчаны Ці ён. Калі няма, выканайце каманду

 SET GLOBAL event_scheduler = ON;

каб запусціць яго.

91
дададзена
Дзякуючы. Яго працуе.
дададзена аўтар Rana, крыніца
так, так, я не павінен.
дададзена аўтар Rana, крыніца
Будзьце асцярожныя: магчыма, што SHOW PROCESSLIST не будзе паказваць працэс, працякаючая, нават калі ён на самай справе працуе - што адбываецца ў маёй на аснове вэб-хостынгу Plesk ў ўліковага запісу, дзе ў мяне няма прывілеяў суперпользователя. Event_scheduler працуе, але ён не адлюстроўваецца ў спісе. Для мяне гэта лепш выкарыстоўваць абярыце @@ event_scheduler ; ён будзе вяртаць ON у выпадку, калі яна ёсць.
дададзена аўтар Pere, крыніца
Добра! Вы не павінны перазапусціць сервер MySQL, ці не так?
дададзена аўтар Jacopofar, крыніца
@Jac_opo я павінен прытрымлівацца вашай інструкцыі, але нічога не адбылося, я паставіў глабальны быць на і перазапусціць мой сервер, але нічога не адбудзецца, на мой, калі падзея каля месяца, як я магу тэставанне? Я тэставаў па даце змены, але нічога не здарылася,
дададзена аўтар Freddy Sidauruk, крыніца
@Rana як я магу адладзіць яе? Я выкарыстоўваю PHPMyAdmin, але не працуе, калі ласка, ідзе сюды stackoverflow.com/questions/35400140/…
дададзена аўтар Freddy Sidauruk, крыніца

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

5
дададзена
Я хацеў бы дадаць, што event_scheduler = 1 ідзе пад [туздЫ] раздзел файла канфігурацыі.
дададзена аўтар aggregate1166877, крыніца

Праверце, калі 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 каманды, як ужо згадвалася вышэй.

3
дададзена

спрабаваць

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 ;
1
дададзена
Гэта не будзе працаваць, таму што падзея мае для запуску першага для гэтага event_scheduler быць уключаны.
дададзена аўтар earl3s, крыніца

Калі вы хочаце, каб ваш event_scheduler для запуску аўтаматычна кожны раз, калі перазагружаецца сервер MySQL, у любым месцы пад [туздЫ] на my.ini або <�код > my.cnf файл, які вы можаце знайсці ў /і г.д./MySQL варта змясціць

[mysqld]

# turning on event_scheduler  
event_scheduler=ON

перазапусціць MySQL, каб праверыць, калі ён працуе (у камандным радку тэрмінала!)

sudo service MySQL restart

затым праверыць PROCESSLIST

SHOW PROCESSLIST

Вы можаце праверыць, калі вашыя падзеі запуску, правяраючы ў апошні раз, калі яны беглі

SELECT * FROM INFORMATION_SCHEMA.events
0
дададзена

Я хацеў бы, каб дадаць да гэтай тэмы. Я кінуў сваю базу дадзеных на іншы сервер, і ў выніку Вызначальнік майго мерапрыемства не было такога гранта, вызначанага для карыстальніка. Я абнавіў свой Вызначальнік з

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

Пераканайцеся, што ваш Вызначальнік мае правільныя ЛЬГОТЫ.

0
дададзена

Не забудзьцеся дадаць у <�моцны> Фіксаваць ', пасля' <�моцны> DO ПАЧАЦЬ 'або "<�моцны> DO . Працы для мяне пасля гэтага.

0
дададзена

Я проста зразумеў, што на MariaDB, пасля дадання падзеі (у маім выпадку, гэта быў першы адзін), вы павінны перазапусціць EVENT-планавальнік

 SET GLOBAL event_scheduler = OFF;

потым

 SET GLOBAL event_scheduler = ON;

каб зрабіць гэта на самай справе прынесці планавальнік ў «чаканне актывацыі» -состояние.

0
дададзена