2011-07-03 36 views
35

私はこのストアドプロシージャを持っています。これをたとえば5秒間隔で実行するにはどうすればよいですか? 1日よりも古いタイムスタンプのデータを削除するルーチンのように?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

あなたは本当に** **各5秒にそれを実行する必要がありますか? – zerkms

+7

nop、6時間間隔で正常です。しかし、テストするのが簡単です秒: – user455318

+1

5秒ごとに自動的に何かを実行することは、おそらく本当に悪い考えです。 1日に1回、または1時間に1回実行してみてください。そうすれば、あなたのパフォーマンスは完全に消滅しません。 – Flimzy

答えて

54

mysqlスケジューラを使用して5秒ごとに実行できます。

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

私はdelete_rows_linksをこれに置き換えますが、明らかに動作しません。 'database_charts'から削除します.'activation_link_password_reset'どこのTIMESTAMPDIFF(DAY、' time'、NOW())<1; – user455318

+1

@ user455318:「動作しません」---説明ではありません。どのようなMySQLのバージョンを使用していますか?どのようなエラーがありましたか? – zerkms

+0

私はSET GLOBALを有効にできませんevent_scheduler = ON;私に接続エラーを与える – user773961

3

あなたはアウト・オブ・DBソリューションに開放している場合:あなたはcronジョブを設定することができ、あなたはそれを使用していないが、私はこれが働くだろう願っています決してhttp://dev.mysql.com/doc/refman/5.1/en/create-event.html

でサンプルを見つけることができますそのプロシージャを呼び出すスクリプトを実行します。

+1

Cronは5秒ごとにコマンドを実行できません。彼は6時間間隔で良いです。 – zerkms

+0

ええ、私はOPのコメントを念頭に置いて答えた、私はそれを指定する必要があります! – Vache

+0

残念ながら、MySQL 5.1より前のバージョンでは、イベントがそのバージョンで導入されたので、これは唯一の選択肢と思われます。 – Gruber

10

私はこのクエリを使用し、それが私の仕事:

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

cronジョブを作成するためには、次の手順を実行します。

  1. 実行このコマンドを:= ON GLOBAL event_schedulerを設定します。

  2. ERROR 1229(HY000)場合:変数 'event_schedulerが' GLOBAL 可変であり、SET GLOBALで設定する必要があります。 mportant

それだけでDISABLEDにイベントスケジューラを設定することが可能ですサーバーの起動。 event_schedulerがONまたはOFFの場合、実行時にDISABLEDに設定することはできません。また、起動時にEvent SchedulerがDISABLEDに設定されている場合、実行時にevent_schedulerの値を変更することはできません。サーバの起動時にコマンドラインオプションとして

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

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

    event_scheduler=DISABLED 
    

    詳細については、documentationを参照してください。

    DROP EVENT IF EXISTS EVENT_NAME; 
        CREATE EVENT EVENT_NAME 
    ON SCHEDULE EVERY 10 SECOND/minute/hour 
    DO 
    CALL PROCEDURE_NAME(); 
    
関連する問題