2013-05-27 18 views
33

ich die folgenden einfachen Test-Event über phpMyAdmin auf meine MySQL-Datenbank hinzugefügt haben:Mysql Ereignis funktioniert nicht

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 

Meine Umgebung ist mac + MAMP Pro. Ich erwarte, innerhalb einer Minute alle Zeilen meiner 'Test' Tabelle mit dem Namen 'z' zu ändern. Aber nicht so.

Muss ich etwas Zusätzliches haben, damit meine Veranstaltungen funktionieren?

Ausgabe von "SHOW PROCESS": enter image description here

Dank.

+0

Können Sie die Ergebnisse der Abfrage SHOW PROCESS bereitzustellen; '? Vielleicht ist der Scheduler nicht gestartet. – Jacopofar

+0

hat gerade die Ausgabe meiner Fragebeschreibung hinzugefügt. Ich habe nichts getan, um den Scheduler zu starten. Wie starte ich es bitte? – Rana

Antwort

80

Ereignisse werden vom Scheduler ausgeführt, der standardmäßig nicht gestartet wird. Mit SHOW PROCESSLIST kann überprüft werden, ob es gestartet wurde. Wenn nicht, führen Sie den Befehl

SET GLOBAL event_scheduler = ON; 

, um es auszuführen.

+0

Danke. Es funktioniert jetzt. – Rana

+1

Gut! Sie mussten den MySQL-Server nicht neu starten, oder? – Jacopofar

+2

ja, richtig, ich musste nicht. – 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

This funktioniert nicht, da das Ereignis zuerst ausgeführt werden muss, damit der Ereignisscheduler aktiviert wird. – earl3s

4

Für diejenigen Versuchen Sie fragen sich, wie es beim Start standardmäßig zu aktivieren, fügen Sie die folgende in der Konfigurationsdatei (my.ini, my.cnf):

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

Neustart von der Service ist in diesem Fall nicht erforderlich, wenn Sie also eine minimale Unterbrechung wollen, fügen Sie diese in die Konfigurationsdatei und dann die SQL ausführen:

SET GLOBAL event_scheduler = ON; 

Auf diese Weise wird es für den aktuellen Prozess ausgeführt, und wenn der Server neu gestartet wird, wird es weiterhin funktionieren.

Beachten Sie, dass dies nicht funktioniert, wenn der Event_scheduler auf deaktiviert festgelegt wurde. In diesem Fall besteht die einzige Möglichkeit darin, den Dienst neu zu starten.

0

Ich möchte nur zu diesem Thema hinzufügen. Ich habe meine Datenbank auf einen anderen Server ausgelagert und als Ergebnis hatte der Definierer meines Ereignisses keine solche Berechtigung für den Benutzer definiert. Ich habe meinen Definierer mit

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

aktualisiert Stellen Sie sicher, dass Ihr Definierer die richtigen PRIVILEGES hat.

3

Überprüfen Sie, ob die event_scheduler On ist - führen Sie den folgenden Befehl ein:

SHOW PROCESSLIST; 

Es wird Ausgang eine Tabelle/Einträge, Sie nach einem Eintrag suchen müssen mit Benutzerevent_scheduler und BefehlDaemon:

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

OR, können Sie auch den folgenden Befehl verify mit:

SELECT @@global.event_scheduler; 

Das Ergebnis sollte ON lauten, andernfalls setzen Sie es ab (erhalten Sie 0 für den Befehl), wie im nächsten Abschnitt angegeben.


Wenn Sie (wie oben) keinen solchen Eintrag haben, können Sie den Event-Scheduler mit dem folgenden Befehl starten:

SET GLOBAL event_scheduler = ON; 

Ist das erledigt, können Sie überprüfen, ob es ausgeführt worden ist, Verwenden Sie den Befehl SHOW PROCESSLIST ordnungsgemäß, wie oben erwähnt.

0

Denken Sie daran, in 'Commit' hinzuzufügen, nach ' DO BEGIN' oder 'DO'. Funktioniert für mich danach.

0

Ich fand heraus, nur, dass auf MariaDB, nachdem ein Ereignis Zugabe (in meinem Fall ist es der erste war), können Sie die Event-Scheduler

SET GLOBAL event_scheduler = OFF; 

und dann

SET GLOBAL event_scheduler = ON; 
neu starten

, damit es den Scheduler in den Status "Warten auf Aktivierung" bringt.

0

Wenn Sie Ihre event_scheduler wollen automatisch neu gestartet wird jedes Mal MySQL-Server zum Start, überall unter dem [mysqld] Abschnitt der my.ini oder my.cnf Datei, die Sie in /etc/mysql finden sollten Sie platzieren

[mysqld] 

# turning on event_scheduler 
event_scheduler=ON 

Neustart mysql, wenn es zu prüfen, (im Kommandozeilen-Terminal!) läuft

sudo service mysql restart 

dann überprüfen Sie Ihre PROCESS

SHOW PROCESSLIST 

Sie können überprüfen, ob Ihre Veranstaltungen laufen, das letzte Mal überprüft sie

lief
SELECT * FROM INFORMATION_SCHEMA.events