web-dev-qa-db-ja.com

MySQLでストアドプロシージャをスケジュールする方法

このストアドプロシージャがあります。たとえば、5秒間隔でこれを実行するにはどうすればよいですか? 1日以上前のタイムスタンプを持つデータを削除するルーチンのように?

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

Mysqlスケジューラを使用して、5秒ごとに実行できます。サンプルは http://dev.mysql.com/doc/refman/5.1/en/create-event.html にあります。

使用したことはありませんが、これが機能することを願っています。

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

私はこのクエリを使用し、それは私のために働いた:

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

Cronjobを作成するには、次の手順を実行します。

  1. 次のコマンドを実行します。SET GLOBAL event_scheduler = ON;

  2. エラー1229(HY000)の場合:変数 'event_scheduler'はGLOBAL変数であり、SET GLOBAL:mportantで設定する必要があります

サーバーの起動時にのみ、イベントスケジューラを無効に設定できます。 event_schedulerがONまたはOFFの場合、実行時にDISABLEDに設定できません。また、起動時にイベントスケジューラが無効に設定されている場合、実行時にevent_schedulerの値を変更することはできません。

イベントスケジューラを無効にするには、次の2つの方法のいずれかを使用します。

  1. サーバーを起動する際のコマンドラインオプションとして:

    --event-scheduler=DISABLED
    
  2. サーバー構成ファイル(my.cnf、またはWindowsシステムのmy.ini)に、サーバーによって読み取られる行を含めます(たとえば、[mysqld]セクションに)。

    event_scheduler=DISABLED
    

    詳細については、MySQL ドキュメント を参照してください。

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

DB以外のソリューションを利用できる場合:プロシージャを呼び出すスクリプトを実行するcronジョブをセットアップできます。

3
dee-see