GNU/Linux >> Linux の 問題 >  >> Linux

MySQLイベントおよびイベントスケジューラガイド

はじめに

MySQLイベントは、ユーザー定義のスケジュールに従って実行されるタスクです。 。イベントスケジューラは、スケジュールされた時間にイベントを実行する特別なスレッドです。

MySQLイベントは、データベース管理と定期的なデータベース運用タスクを容易にするため、役立ちます。

このチュートリアルでは、MySQLイベントとは何か、およびそれらを設定して使用する方法を学習します。

前提条件:

  • データベースサーバー上でMySQLを実行しているシステム
  • root権限を持つMySQLユーザーアカウント

MySQLイベントスケジューラとは何ですか?

MySQL Event Schedulerは、バックグラウンドで実行され、スケジュールされたイベントの実行を管理するスレッドです。グローバル変数event_scheduler でない限り、スケジューラはスリープ状態です。 ONに設定されています または1

MySQLイベントスケジューラは、MySQLのCronジョブの代替を表します 。イベントスケジューラのいくつかの利点は次のとおりです。

  • MySQLサーバーに直接書き込まれます。
  • プラットフォームやアプリケーションに依存しません。
  • 定期的なデータベースの更新またはクリーンアップが必要な場合はいつでも使用できます。
  • クエリのコンパイル回数を減らします。

MySQLイベントスケジューラの構成

MySQLイベントスケジューラの状態は、スケジューラをオンに設定するように構成できます。 、オフ 、または無効

イベントスケジューラの状態を確認するには、次のコマンドを実行します。

SHOW processlist;

event_scheduler 結果に表示されるシステム変数は、イベントスケジューラの状態を示します。ここでは、 event_scheduler 可変状態は空のキューで待機中です 、これは、スケジューラがオンになっていて、イベントがトリガーするのを待っていることを意味します。

考えられる状態は次のとおりです。

  • オン :イベントスケジューラスレッドが実行され、スケジュールされたすべてのイベントが実行されます。これは、スケジューラのデフォルトの状態です。スケジューラがONの場合 SHOWプロセスリスト コマンド出力はそれをデーモンプロセスとしてリストします。

イベントスケジューラをONにするには 、次のコマンドを実行します:

SET GLOBAL event_scheduler = ON;

ON 1と互換性があります

  • オフ :イベントスケジューラスレッドが実行されておらず、 SHOW processlistの出力に表示されません 。イベントスケジューラがOFFに設定されている場合 、スケジュールされたイベントは実行されません。

イベントスケジューラをOFFにするには 、次のコマンドを実行します:

SET GLOBAL event_scheduler = OFF;

OFF 0と互換性があります

  • 無効 :この状態は、イベントスケジューラが動作していないことを意味します。スレッドは実行されず、SHOWプロセスリストの出力に表示されません コマンド。

イベントスケジューラを無効にするには、サーバーの起動時に次のコマンドラインオプションを追加します。

--event-scheduler=DISABLED

MySQLイベントスケジューリング

イベントは、指定された時間または定期的に実行されるSQLステートメントを含むデータベースオブジェクトです。イベントは特定の日時に開始および終了します。

MySQLイベントはユーザーが指定した時間に実行されるため、これらのイベントは一時的とも呼ばれます。 トリガー 。ただし、特定のイベントに応答して実行されるデータベースオブジェクトであるMySQLトリガーと混同しないでください。したがって、イベントという用語を使用することをお勧めします 混乱を避けるためにスケジュールされたタスクを参照する場合。

次のセクションでは、作成の方法について説明します 、表示変更 または削除 イベント。

新しいイベントを作成する

新しいイベントを作成するには、次の構文を使用します。

CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
DO
event_body

存在しない場合 ステートメントは、イベント名が使用中のデータベースに固有であることを確認します。 event_nameの代わりに一意のイベント名を指定してください 構文。イベントの実行スケジュールは、 ON SCHEDULEの後に指定されます 声明。イベントは1回限りのイベントにすることができます または定期的なイベント

event_bodyの代わりにSQLステートメントを入力してください DOの後の構文 キーワード。イベント本体には、ストアドプロシージャ、単一のクエリ、または複合ステートメントを含めることができます。 BEGIN END内に複合ステートメントを記述します ブロック。

イベントのスケジュール

イベントは、後で実行するか、定期的に実行するようにスケジュールできます。

ワンタイムイベント

1回限りのイベントは一度だけ実行され、その後自動的に削除されます。

1回限りのイベントを作成するには、 ON SCHEDULEの後にタイムスタンプを指定します 次の構文を使用したステートメント:

AT timestamp + [INTERVAL interval]

間隔の可能な選択肢 は:

  • 四半期
  • 時間
  • 2番目
  • YEAR_MONTH
  • DAY_HOUR
  • DAY_MINUTE
  • DAY_SECOND
  • HOUR_MINUTE
  • HOUR_SECOND
  • MINUTE_SECOND

タイムスタンプはDATETIMEである必要があります またはTIMESTAMP 将来の価値。正確な時刻を指定するには、 + INTERVALを使用してタイムスタンプに間隔を追加します 、正の整数、および間隔の選択肢の1つ。これは、 CURRENT_TIMESTAMPを使用する場合にのみ適用されることに注意してください 機能。

例:

ここでは、イベントは作成から2日後に発生し、タスクは testという名前のテーブルを削除することです。 。

イベントは実行後に自動的にドロップされます。イベントをデータベースに保存する場合は、 ON COMPLETION PRESERVEを追加します イベントを作成するときの句。

定期的なイベント

定期的なイベントは、指定された時間に繰り返し発生します。定期的なイベントをスケジュールするには、 ON SCHEDULEの後に次の構文を使用します ステートメント:

EVERY interval 
STARTS timestamp [+ INTERVAL] 
ENDS timestamp [+ INTERVAL]

STARTS キーワードは、イベントの実行がいつ開始されるかを指定し、 ENDS キーワードは、イベントの実行をいつ停止するかを指定します。

例:

このイベントにより、MySQLは6か月に1回、すぐに開始してテーブルテストをドロップします。

後でイベントを開始する間隔を指定することもできます。例:

イベントの開始時刻と終了時刻を指定することもできます:

このイベントにより、MySQLは testという名前のテーブルを削除します。 今から5日後から5年間、6か月に1回。

イベントを表示

次のコマンドは、データベースに保存されているすべてのイベントを表示します。

SHOW EVENTS FROM database_name;

1回限りのイベントは実行後に自動的に削除され、 SHOW EVENTSの出力には表示されないことに注意してください。 ON COMPLETION PRESERVE を使用しない限り、コマンド イベントを作成するときの句。

出力には、指定したデータベースに保存されているすべてのイベントが一覧表示されます。

イベントの変更

ALTER EVENTを使用します 既存のイベントを変更するステートメント:

ALTER EVENT event_name
[ ON SCHEDULE schedule ]
[ RENAME TO new_event_name ]
[ ON COMPLETION [ NOT ] PRESERVE ]
[ COMMENT 'comment' ]
[ ENABLED | DISABLED ]
[ DO sql_statement ]

event_name すでに存在するイベントである必要があります。 ALTER EVENT以降のすべてのステートメント 何を変更するかに応じて、オプションです。 ALTER EVENTの句を省略します コマンドは、それらが以前の状態のままであることを意味します。含まれる句は、指定した新しい値が適用されることを意味します。

例:

この例では、イベントの名前を変更し、SQLステートメントを変更しました。

イベントの削除(イベントの削除)

イベントを削除(ドロップ)するには、次の構文を使用します。

DROP EVENT [IF EXISTS] event_name;

例:

このアクションは完全に削除します データベースからのイベント。

IF EXISTSを使用する そのようなイベントが存在しない場合、ステートメントは警告を発行します:

MySQLイベントの制限

MySQLイベントを使用する際に考慮すべき特定の制限があります。それらのいくつかは次のとおりです:

  • イベントは結果セットを返すことはできません。出力はdev/nullに送信され、イベントは失敗するか、ユーザーに通知せずに成功します。
  • イベント名では大文字と小文字は区別されません。 2つのイベントに、大文字と小文字が異なる同じ名前を付けることはできません。
  • イベントは2038年1月19日以降にスケジュールすることはできません。これは、Unixエポックで表現できる最大数です。
  • イベントは、別のストアドプログラム、トリガー、またはイベントによって作成、削除、または変更することはできません。
  • イベントは、ストアドプログラムまたはトリガーを作成、削除、または変更できません。
  • 間隔MONTH YEAR_MONTH QUARTER 、および YEAR 数ヶ月で解決されます。他のすべての間隔は秒単位で解決されます。
  • 同じスケジュールで2つのイベントが発生する可能性がありますが、実行順序を強制する方法はありません。
  • イベントは常に定義者権限で実行されます。スレッドは、イベントを作成したユーザーとして機能するイベントを、そのユーザーの権限で実行します。ユーザーを削除しても、ユーザーが作成したイベントは削除されないことに注意してください。
  • イベントはステートメントの実行回数を変更しません。つまり、 SHOW STATISTICSには影響しません。 コマンド。
  • イベントを実行するための最大遅延は2秒です。ただし、 information_schema.events テーブルには、常にイベント実行の正確な時刻が表示されます。
  • ストアドルーチン内のプリペアドステートメント内のローカル変数への参照の代わりに、ユーザー定義変数を使用します。
  • 再帰呼び出しの数はmax_sp_recursion_depthに制限されています 。この変数がデフォルト値である0の場合、再帰は無効になります。
  • START TRANSACTIONを使用します BEGIN WORKの代わりにステートメント BEGIN WORK以降 BEGIN ENDの開始として扱われます ブロックします。
  • ストアドプロシージャのその他の制限は、イベントにも適用されます。

Linux
  1. NGINXを使用してHTTP(S)、SSH、およびMySQL/MariaDBのリバースプロキシを実行するためのガイド

  2. RsyslogとMySQLを使用してLogAnalyzerをセットアップする方法

  3. Solarisサービスのステータスと依存関係?

  1. MySQLコマンドラインのヒントとコツトップ8

  2. MySQLイベントスケジューラ

  3. MySQLユーザーとデータベースの基本

  1. MySQL –パフォーマンスの調整と最適化

  2. BashForループガイドと例

  3. 新しいデータベースを作成し、MySQL/MariaDBで使用します