2011-07-03 21 views
35

Mam tę procedurę przechowywaną. Jak mogę uruchomić to na przykład w odstępach 5 sekund? Jak rutyna eliminująca dane z datownikiem starszym niż jeden dzień?Jak zaplanować procedurę przechowywaną w MySQL

DROP PROCEDURE IF EXISTS `delete_rows_links` 
GO 

CREATE PROCEDURE delete_rows_links 
BEGIN 

    DELETE activation_link 
    FROM activation_link_password_reset 
    WHERE TIMESTAMPDIFF(DAY, `time`, NOW()) < 1 ; 

END 

GO 
+2

Czy naprawdę trzeba go uruchomić każde 5 sekund ** **? – zerkms

+7

nop, w odstępie 6 godzin jest w porządku. Ale testowanie jest łatwiejsze z sekundami :) – user455318

+1

Uruchamianie czegokolwiek automatycznie co 5 sekund jest prawdopodobnie złym pomysłem. Spróbuj uruchomić go raz dziennie lub raz na godzinę, więc nie całkowicie zabijasz swój występ. – Flimzy

Odpowiedz

54

Możesz użyć programu planującego mysql, aby uruchomić go co 5 sekund. Można znaleźć próbki w http://dev.mysql.com/doc/refman/5.1/en/create-event.html

nigdy nie używane, ale mam nadzieję, że to będzie działać:

CREATE EVENT myevent 
    ON SCHEDULE EVERY 5 SECOND 
    DO 
     CALL delete_rows_links(); 
+0

i zastępuję tylko delete_rows_links, ale najwyraźniej nie działa. USUŃ Z 'database_charts' .activation_link_password_reset' GDZIE TIMESTAMPDIFF (DZIEŃ,' time', NOW()) <1; – user455318

+1

@ user455318: "nie działa" --- nie jest wyjaśnieniem.Jakiej wersji mysql używasz? Jaki błąd dostałeś? – zerkms

+0

Nie mogę włączyć SET GLOBAL event_scheduler = ON; daj mi błąd połączenia – user773961

3

Jeśli jesteś otwarty na out-of-the-DB rozwiązanie: Można założyć, że crona uruchamia skrypt, który sam wywoła procedurę.

+1

Cron nie może uruchomić polecenia co 5 sekund. Jest dobry z 6-godzinną przerwą. – zerkms

+0

Tak, odpowiedziałem, mając na uwadze komentarz OP, powinienem to sprecyzować! – Vache

+0

Niestety, przed MySQL 5.1 wydaje się, że jest to jedyna opcja, ponieważ zdarzenia zostały wprowadzone w tej wersji. – Gruber

10

użyłem tej kwerendy i pracował dla mnie:

CREATE EVENT `exec` 
    ON SCHEDULE EVERY 5 SECOND 
    STARTS '2013-02-10 00:00:00' 
    ENDS '2015-02-28 00:00:00' 
    ON COMPLETION NOT PRESERVE ENABLE 
DO 
    call delete_rows_links(); 
6

W celu stworzenia cronjob, wykonaj następujące kroki:

  1. uruchomić to polecenie: set GLOBAL event_scheduler = ON;

  2. Jeśli ERROR 1229 (HY000): Zmienna „event_scheduler” jest zmienną globalną i powinny być ustawione z ustalanie całkowitych: mportant

Jest możliwe, aby ustawić harmonogram imprezy dla NIEPEŁNOSPRAWNYCH tylko na uruchamianie serwera. Jeśli event_scheduler jest WŁĄCZONY lub WYŁĄCZONY, nie można ustawić go na WYŁĄCZONY w czasie wykonywania. Ponadto, jeśli Harmonogram zdarzeń jest ustawiony na WYŁĄCZONE podczas uruchamiania, nie można zmienić wartości event_scheduler w czasie wykonywania.

Aby wyłączyć harmonogram imprezy, użyj jednej z następujących dwóch metod:

  1. Jako opcja wiersza poleceń podczas uruchamiania serwera:

    --event-scheduler=DISABLED 
    
  2. w pliku konfiguracyjnym serwera (my.cnf lub my.ini na systemach Windows): zawierają linię, w której będą odczytywane przez serwer (na przykład w sekcji [mysqld]):

    event_scheduler=DISABLED 
    

    Przeczytaj MySQL documentation, aby uzyskać więcej informacji.

    DROP EVENT IF EXISTS EVENT_NAME; 
        CREATE EVENT EVENT_NAME 
    ON SCHEDULE EVERY 10 SECOND/minute/hour 
    DO 
    CALL PROCEDURE_NAME(); 
    
Powiązane problemy