MySQLイベントスケジューラ(Event Scheduler)の紹介

7518 ワード

一、紹介
イベントスケジューラはMySQL 5.1に追加されたもう一つの特色機能で、オペレーティングシステムのタスクスケジューラでしかできない一部のタイミング機能に取って代わるタイミングタスクスケジューラとして使用できます.また、MySQLのイベントスケジューラは、リアルタイム性が要求される環境で非常に実用的なタスクを毎秒実行できます.
イベントスケジューラはタイミングトリガで実行され、この角度から「一時的なトリガ」とも呼ばれる.トリガは、テーブルで生成されたイベントに対していくつかの文を実行するだけで、イベントスケジューラは、ある(間隔)時間にいくつかの文を実行します.イベントは、特定のスレッドによって管理されます.つまり、いわゆる「イベントスケジューラ」です.イベントスケジューラを有効にすると、SUPER権限を持つアカウントがSHOW PROSCESSLISTを実行すると、このスレッドが表示されます.グローバル変数event_を設定することでschedulerの値を使用すると、イベントスケジューラが有効になっているかどうかを動的に制御できます.
この機能を使用する前にevent_を確認する必要があります.schedulerがオープンし、実行可能1 SET GLOBAL event_scheduler = 1;
または1 SET GLOBAL event_scheduler = ON ;
をオンにします.1 mysqld ... --event_scheduler=1
現在イベントスケジューラが起動しているかどうかを確認するには、次のSQLを実行します.1 SHOW VARIABLES LIKE 'event_scheduler' ;
または1 SELECT @@event_scheduler;
二、イベントの作成(CREATE EVENT)
まず文法を見てみましょう.1 CREATE EVENT [IF NOT EXISTS] event_name 2      ON SCHEDULE schedule 3      [ ON COMPLETION [ NOT ] PRESERVE] 4      [ENABLE | DISABLE] 5      [COMMENT 'comment' ] 6      DO sql_statement;
schedule:     AT TIMESTAMP [+ INTERVAL INTERVAL]   | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]
INTERVAL:     quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |               WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |               DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
1)まず簡単な例を見て、1秒間に1本ずつデータテーブルに記録する1 USE test; 2 CREATE TABLE aaa (timeline TIMESTAMP ); 3 CREATE EVENT e_test_insert 4          ON SCHEDULE EVERY 1 SECOND 5          DO INSERT INTO test.aaa VALUES ( CURRENT_TIMESTAMP );
3秒待ってから、クエリーを実行してみます.1 SELECT * FROM aaa;
+———————+ | timeline            | +———————+ | 2007-07-18 20:44:26 | | 2007-07-18 20:44:27 | | 2007-07-18 20:44:28 | +———————+
2)5日後にtestテーブルを空にします.1 CREATE EVENT e_test 2          ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY 3          DO TRUNCATE TABLE test.aaa;
3)2007年7月20日12時ちょうどにtest表を空にする:1 CREATE EVENT e_test 2          ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00' 3          DO TRUNCATE TABLE test.aaa;
4)毎日定時にtest表を空にする:1 CREATE EVENT e_test 2          ON SCHEDULE EVERY 1 DAY 3          DO TRUNCATE TABLE test.aaa;
5)5日後毎日定時クリアtest表を開く:1 CREATE EVENT e_test 2          ON SCHEDULE EVERY 1 DAY 3          STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY 4          DO TRUNCATE TABLE test.aaa;
6)毎日定時にtest表を空にし、5日後に実行を停止する.1 CREATE EVENT e_test 2          ON SCHEDULE EVERY 1 DAY 3          ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY 4          DO TRUNCATE TABLE test.aaa;
7)5日後に毎日定時クリアtest表を開き、1ヶ月後に実行を停止する:1 CREATE EVENT e_test 2          ON SCHEDULE EVERY 1 DAY 3          STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY 4          ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH 5          DO TRUNCATE TABLE test.aaa;
[ON COMPLETION[NOT]PRESERVE]このイベントを一度実行するか永続的に実行するかを設定できます.デフォルトはNOT PRESERVEです.
8)毎日定時にtestテーブルを空にします(一度だけ実行し、タスクが完了したらイベントを終了します):1 CREATE EVENT e_test 2          ON SCHEDULE EVERY 1 DAY 3          ON COMPLETION NOT PRESERVE 4          DO TRUNCATE TABLE test.aaa;
[ENABLE|DISABLE]ただし、イベント作成後のステータスがオンまたはオフになっているかどうかを設定します.デフォルトはENABLEです.[COMMENT'comment']は、このイベントにコメントを付けることができます.
三、修正イベント(ALTER EVENT)
ALTER EVENT event_name     [ON SCHEDULE schedule]     [RENAME TO new_event_name]     [ON COMPLETION [NOT] PRESERVE]     [COMMENT 'comment']     [ENABLE | DISABLE]     [DO sql_statement]
1)一時停止イベント1 ALTER EVENT e_test DISABLE;
2)オープンイベント1 ALTER EVENT e_test ENABLE;
3)毎日のクリアtest表を5日間のクリアに変更:1 ALTER EVENT e_test 2          ON SCHEDULE EVERY 5 DAY ;
四、削除イベント(DROP EVENT)
文法は簡単です.以下に示します.1 DROP EVENT [IF EXISTS] event_name
たとえば、前に作成したe_を削除します.testイベント1 DROP EVENT e_test;
もちろんこのイベントが存在することが前提ですが、そうでないとERROR 1513(HY 000):Unknown eventエラーが発生するので、IF EXISTSを加えたほうがいいです
DROP EVENT IF EXISTS e_test;

五、続き
この特性は確かに非常に有用であり、データテーブルをタイミング的に空にしたり、サーバからプライマリ・スレーブを監視したり、データをまとめたりして、毎秒まで正確にすることができ、リアルタイム性も保障されます.SQL文のスケジューリングに加えて、MYSQLのスケジューラはストレージ・プロシージャをスケジューリングすることもできます.
しかし、2つのイベントが同じオブジェクトに対して競合する場合、この状況は私が理解している問題なのか、それとも確かにそうなのか、例えば毎秒挿入とタイミング削除が競合する.