web-dev-qa-db-fra.com

Comment planifier une procédure stockée dans MySQL

J'ai cette procédure stockée. Comment puis-je exécuter cela par exemple avec des intervalles de 5 secondes? Comme une routine pour éliminer les données avec un horodatage de plus d'un jour?

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
43
user455318

Vous pouvez utiliser le planificateur mysql pour l'exécuter toutes les 5 secondes. Vous pouvez trouver des exemples sur http://dev.mysql.com/doc/refman/5.1/en/create-event.html

Je ne l'ai jamais utilisé mais j'espère que cela fonctionnera:

CREATE EVENT myevent
    ON SCHEDULE EVERY 5 SECOND
    DO
      CALL delete_rows_links();
68
zerkms

J'ai utilisé cette requête et cela a fonctionné pour moi:

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();
11
Nero

Afin de créer un cronjob, procédez comme suit:

  1. exécutez cette commande: SET GLOBAL event_scheduler = ON;

  2. Si ERREUR 1229 (HY000): la variable 'event_scheduler' est une variable GLOBALE et doit être définie avec SET GLOBAL: mportant

Il est possible de définir le Planificateur d'événements sur DÉSACTIVÉ uniquement au démarrage du serveur. Si event_scheduler est ON ou OFF, vous ne pouvez pas le définir sur DISABLED lors de l'exécution. De plus, si Event Scheduler est défini sur DISABLED au démarrage, vous ne pouvez pas modifier la valeur de event_scheduler au moment de l'exécution.

Pour désactiver le planificateur d'événements, utilisez l'une des deux méthodes suivantes:

  1. En option de ligne de commande lors du démarrage du serveur:

    --event-scheduler=DISABLED
    
  2. Dans le fichier de configuration du serveur (my.cnf ou my.ini sur les systèmes Windows): incluez la ligne où il sera lu par le serveur (par exemple, dans une section [mysqld]):

    event_scheduler=DISABLED
    

    Lisez MySQL documentation pour plus d'informations.

     DROP EVENT IF EXISTS EVENT_NAME;
      CREATE EVENT EVENT_NAME
     ON SCHEDULE EVERY 10 SECOND/minute/hour
     DO
     CALL PROCEDURE_NAME();
    
6
Rishi Gautam

Si vous êtes ouvert à une solution hors de la base de données: vous pouvez configurer un travail cron qui exécute un script qui appellera lui-même la procédure.

3
dee-see