イベントは、特別なイベントスケジューラスレッドによって実行されます。イベントスケジューラと呼ぶ場合、実際にはこのスレッドを指しています。 実行中、イベントスケジューラスレッドとその現在の状態は、次の説明で示すように、PROCESS
権限を保有するユーザーが SHOW PROCESSLIST
の出力で確認できます。
event_scheduler
グローバルシステム変数によって、イベントスケジューラがサーバー上で有効であり実行しているかどうかが決まります。 ここで説明するように、これらの 3 つの値のいずれかがイベントのスケジューリングに影響します。 デフォルトは ON
です。
-
ON
: イベントスケジューラが開始され、イベントスケジューラスレッドがすべてのスケジュール設定済みイベントを実行しています。イベントスケジューラが
ON
の場合、イベントスケジューラスレッドは、デーモンプロセスとしてSHOW PROCESSLIST
の出力に一覧表示され、その状態は次に示すように表示されます。mysql> SHOW PROCESSLIST\G *************************** 1. row *************************** Id: 1 User: root Host: localhost db: NULL Command: Query Time: 0 State: NULL Info: show processlist *************************** 2. row *************************** Id: 2 User: event_scheduler Host: localhost db: NULL Command: Daemon Time: 3 State: Waiting for next activation Info: NULL 2 rows in set (0.00 sec)
イベントスケジュール設定は、
event_scheduler
の値をOFF
に設定することで停止できます。 -
OFF
: イベントスケジューラは停止しています。 イベントスケジューラスレッドは実行されておらず、SHOW PROCESSLIST
の出力に表示されておらず、スケジュール設定済みイベントが実行されていません。イベントスケジューラが停止している場合 (
event_scheduler
がOFF
です)、event_scheduler
の値をON
に設定することで開始できます。 (次の項目を参照してください。) DISABLED
: この値はイベントスケジューラを動作しないようにします。 イベントスケジューラがDISABLED
の場合、イベントスケジューラスレッドは実行していません (また、SHOW PROCESSLIST
の出力にも表示されません)。 また、イベントスケジューラの状態は実行時に変更できません。
イベントスケジューラのステータスが DISABLED
に設定されていない場合、(SET
を使用して) event_scheduler
の ON
と OFF
を切り替えることができます。 この変数を設定するときに、OFF
に 0
を、ON
に 1
を使用することも可能です。 したがって、mysql クライアントで次の 4 つのどのステートメントを使用しても、イベントスケジューラをオンにできます。
SET GLOBAL event_scheduler = ON;
SET @@GLOBAL.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@GLOBAL.event_scheduler = 1;
同様に、次の 4 つのどのステートメントを使用してもイベントスケジューラをオフにできます。
SET GLOBAL event_scheduler = OFF;
SET @@GLOBAL.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@GLOBAL.event_scheduler = 0;
ON
と OFF
には対応する数値がありますが、SELECT
または SHOW VARIABLES
によって event_scheduler
に対して表示される値は、常に OFF
、ON
、または DISABLED
のいずれかになります。 DISABLED
に対応する数値はありません。 このため、この変数を設定するときに、ON
と OFF
は通常 1
と 0
よりも優先されます。
グローバル変数として指定しないで event_scheduler
を設定しようとすると、エラーが発生します。
mysql< SET @@event_scheduler = OFF;
ERROR 1229 (HY000): Variable 'event_scheduler' is a GLOBAL
variable and should be set with SET GLOBAL
イベントスケジューラを DISABLED
に設定できるのは、サーバーの起動時だけです。 event_scheduler
が ON
または OFF
の場合、実行時にこれを DISABLED
には設定できません。 また、イベントスケジューラが起動時に DISABLED
に設定されている場合、実行時に event_scheduler
の値に変更できません。
イベントスケジューラを無効にするには、次の 2 つの方法のいずれかを使用します。
-
サーバーの起動時のコマンド行オプションとして
--event-scheduler=DISABLED
-
サーバー構成ファイル (
my.cnf
または Windows システム上のmy.ini
) に、サーバーが読み取ることができる行を含めます ([mysqld]
セクションなど):event_scheduler=DISABLED
イベントスケジューラを有効にするには、必要に応じて、--event-scheduler=DISABLED
コマンド行オプションを使用しないでサーバーを再起動するか、サーバー構成ファイルの event-scheduler=DISABLED
を含む行を削除するかコメントアウトしたあとでサーバーを再起動します。 または、サーバーの起動時に DISABLED
値の代わりに ON
(または 1
) か OFF
(または 0
) を使用できます。
event_scheduler
が DISABLED
に設定されている場合、イベント操作ステートメントを発行できます。 このような場合には警告もエラーも生成されません (ステートメント自体が有効であるとします)。 ただし、この変数を ON
(または 1
) に設定するまで、スケジュール設定済みイベントは実行できません。 これが行われると、イベントスケジューラスレッドは、スケジュール設定条件が満たされているすべてのイベントを実行します。
--skip-grant-tables
オプションを使用して MySQL Server を起動すると、event_scheduler
が DISABLED
に設定され、コマンド行や my.cnf
または my.ini
ファイルで設定されたほかのすべての値をオーバーライドします (Bug #26807)。
イベントの作成、変更、または削除に使用される SQL ステートメントについては、セクション25.4.3「イベント構文」を参照してください。
MySQL は、INFORMATION_SCHEMA
データベースに EVENTS
テーブルを提供します。 このテーブルは、サーバー上で定義されているスケジュール設定済みイベントに関する情報を取得するためにクエリーできます。 詳細は、セクション25.4.4「イベントメタデータ」およびセクション26.14「INFORMATION_SCHEMA EVENTS テーブル」を参照してください。
イベントスケジュール設定と MySQL 権限システムに関する情報については、セクション25.4.6「イベントスケジューラと MySQL 権限」を参照してください。