MySQLのイベントスケジューラEVENTを理解する

MySQLのイベントスケジューラEVENTを理解する

MySQL のイベント スケジューラ EVENT は、Unix crontab や Windows タスク スケジューラと同様に、スケジュールされたタスクとも呼ばれます。

EVENT は、その名前とそれが存在するスキーマによって一意に識別されます。

EVENT はスケジュールに従って特定のアクションを実行します。操作は、BEGIN...END ステートメント ブロックである SQL ステートメントで構成されます。イベントは 1 回限りでも繰り返しでもかまいません。ワンタイムイベントは一度だけ実行されますが、定期イベントは一定の間隔で繰り返し実行されます。定期イベントには開始日時と終了日時を指定できます。 (デフォルトでは、定期的なイベントは作成後すぐに開始され、無効にされるか削除されるまで無期限に継続します。)

EVENT は特別なイベント スケジューラ スレッドによって実行され、SHOW PROCESSLIST を使用して表示できます。

root@database-one 13:44: [gftest]> '%scheduler%' のような変数を表示します。
+-----------------+-------+
| 変数名 | 値 |
+-----------------+-------+
| イベントスケジューラ | オフ |
+-----------------+-------+
セット内の1行(0.01秒)

root@database-one 13:46: [gftest]> プロセスリストを表示します。
+--------+------+----------------------+-----------+--------+----------+----------+------------------+
| ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 |
+--------+------+----------------------+-----------+--------+----------+----------+------------------+
......
+--------+------+----------------------+-----------+--------+----------+----------+------------------+
セット内の行数は 245 行です (0.00 秒)

root@database-one 13:46: [gftest]> グローバルevent_schedulerを1に設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

root@database-one 13:47: [gftest]> '%scheduler%' のような変数を表示します。
+-----------------+-------+
| 変数名 | 値 |
+-----------------+-------+
| イベントスケジューラ | オン |
+-----------------+-------+
セット内の1行(0.01秒)

root@database-one 13:47: [gftest]> プロセスリストを表示します。
+--------+----------------------+---------+---------+-------+------------------+------------------+
| ID | ユーザー | ホスト | db | コマンド | 時間 | 状態 | 情報 |
+--------+----------------------+---------+---------+-------+------------------+------------------+
......
| 121430 | event_scheduler | localhost | NULL | デーモン | 33 | 空のキューを待機中 | NULL |
......
+--------+----------------------+---------+---------+-------+------------------+------------------+
セット内の行数は 246 行 (0.01 秒)

ご覧のとおり、デフォルトでは MySQL の EVENT はオンになっていません。event_scheduler パラメータを設定することで、EVENT をオンまたはオフにすることができます。開くと、イベント スケジューラ スレッドである event_scheduler が追加されます。

開く、閉じるだけでなく、無効にすることもできます。EVENT を無効にするには、次の 2 つの方法のいずれかを使用します。

  • コマンドラインパラメータでMySQLを起動する

--イベントスケジューラ=無効

  • MySQL設定ファイルでパラメータを設定する

イベントスケジューラ=無効

MySQL 5.7 で EVENT を作成するための完全な構文は次のとおりです。

作成する
  [定義者 = ユーザー]
  イベント
  [存在しない場合]
  イベント名
  スケジュール通りのスケジュール
  [完了時に保存しない]
  [有効 | 無効 | スレーブで無効]
  [コメント '文字列']
  event_bodyを実行します。

スケジュール:
  AT タイムスタンプ [+ INTERVAL 間隔] ...
 | すべての間隔
  [STARTS タイムスタンプ [+ INTERVAL 間隔] ...]
  [ENDS タイムスタンプ [+ INTERVAL 間隔] ...]

間隔:
  数量 {年 | 四半期 | 月 | 日 | 時間 | 分 |
       週 | 秒 | 年_月 | 日_時間 | 日_分 |
       DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

詳細な手順については、公式ウェブサイト https://dev.mysql.com/doc/refman/5.7/en/create-event.html を参照してください。

例を通してこれを検証してみましょう。
1) テーブルを作成します。

root@database-one 13:47: [gftest]> テーブル testevent を作成します(id int auto_increment primary key,create_time datetime);
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

root@database-one 13:50: [gftest]> testevent から * を選択します。
空のセット (0.00 秒)

2) イベントを作成し、3 秒ごとにテーブルにレコードを挿入します。

root@database-one 13:50: [gftest]> スケジュールに従って3秒ごとにイベント insert_date_testevent を作成します。
  -> testevent(create_time) に値(now()) を挿入します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

root@database-one 13:53: [gftest]> イベントを表示 \G
************************** 1. 行 ****************************
         Db: ガールフレンド
        名前: insert_date_testevent
       定義者: root@%
      タイムゾーン: +08:00
        タイプ: 定期
     実行場所: NULL
   間隔値: 3
   間隔フィールド: SECOND
       開始: 2020-03-26 13:53:10
        終了: NULL
       ステータス: 有効
     発信者: 1303306
文字セットクライアント: utf8
照合接続: utf8_general_ci
 データベース照合: utf8_general_ci
セット内の 1 行 (0.00 秒)

3) しばらくしてから、テーブル内のデータをクエリします。

root@database-one 13:53: [gftest]> testevent から * を選択します。
+----+---------------------+
| id | 作成時間 |
+----+---------------------+
| 1 | 2020-03-26 13:53:10 |
| 2 | 2020-03-26 13:53:13 |
| 3 | 2020-03-26 13:53:16 |
| 4 | 2020-03-26 13:53:19 |
| 5 | 2020-03-26 13:53:22 |
| 6 | 2020-03-26 13:53:25 |
| 7 | 2020-03-26 13:53:28 |
| 8 | 2020-03-26 13:53:31 |
| 9 | 2020-03-26 13:53:34 |
| 10 | 2020-03-26 13:53:37 |
| 11 | 2020-03-26 13:53:40 |
| 12 | 2020-03-26 13:53:43 |
| 13 | 2020-03-26 13:53:46 |
| 14 | 2020-03-26 13:53:49 |
| 15 | 2020-03-26 13:53:52 |
| 16 | 2020-03-26 13:53:55 |
+----+---------------------+
セット内の行数は 16 です (0.00 秒)

表のデータから、作成された挿入タイマー タスクが正常に実行されていることがわかります。

show event コマンドを使用するほか、mysql.event または information_schema.events から EVENT の詳細情報を照会したり、show create event コマンドを使用して表示したりすることもできます。

root@database-one 00:09: [gftest]> mysql.event \G から * を選択します
************************** 1. 行 ****************************
         db:gfテスト
        名前: insert_date_testevent
        本文: testevent(create_time) values(now()) に挿入
       定義者: root@%
     実行時: NULL
   間隔値: 3
   間隔フィールド: 秒
       作成日: 2020-03-26 13:53:10
      更新日時: 2020-03-26 13:53:10
    最終実行日時: 2020-03-26 16:09:37
       開始: 2020-03-26 05:53:10
        終了: NULL
       ステータス: 有効
    on_completion: ドロップ
      sql_mode: ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
       コメント:
     発信者: 1303306
      タイムゾーン: +08:00
文字セットクライアント: utf8
照合接続: utf8_general_ci
    db_照合順序: utf8_general_ci
      body_utf8: testevent(create_time) に値(now()) を挿入します
セット内の 1 行 (0.00 秒)

root@database-one 00:09: [gftest]> information_schema.events \G から * を選択します
************************** 1. 行 ****************************
    EVENT_CATALOG: 定義
    イベント_スキーマ: gftest
     EVENT_NAME: insert_date_testevent
       定義者: root@%
      タイムゾーン: +08:00
     EVENT_BODY: SQL
  EVENT_DEFINITION: testevent(create_time) values(now()) に挿入します。
     イベントタイプ: 繰り返し
     実行時: NULL
   間隔値: 3
   INTERVAL_FIELD: 秒
      SQL_MODE: ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
       開始: 2020-03-26 13:53:10
        終了: NULL
       ステータス: 有効
    ON_COMPLETION: 保存しない
       作成日: 2020-03-26 13:53:10
    最終更新日時: 2020-03-26 13:53:10
    最終実行日時: 2020-03-27 00:10:22
    イベントコメント:
     発信者: 1303306
文字セットクライアント: utf8
照合接続: utf8_general_ci
 データベース照合順序: utf8_general_ci
セット内の1行(0.02秒)

root@database-one 00:10: [gftest]> 作成イベントを表示 insert_date_testevent \G
************************** 1. 行 ****************************
        イベント: insert_date_testevent
      sql_mode: ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION
      タイムゾーン: +08:00
    イベントの作成: CREATE DEFINER=`root`@`%` EVENT `insert_date_testevent` ON SCHEDULE EVERY 3 SECOND STARTS '2020-03-26 13:53:10' ON COMPLETION NOT PRESERVE ENABLE DO insert into testevent(create_time) values(now())
文字セットクライアント: utf8
照合接続: utf8_general_ci
 データベース照合: utf8_general_ci
セット内の 1 行 (0.00 秒)

以上がMySQLのイベントスケジューラEVENTの詳しい内容です。MySQLのイベントスケジューラEVENTの詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。

以下もご興味があるかもしれません:
  • MySQL ストアド プロシージャ、トリガー、イベント スケジューラの入門ガイド
  • 初心者から熟練者まで使えるMySQLデータベーストリガー
  • MySQLトリガートリガー例の詳細な説明
  • MySQL トリガーの使用方法と利点と欠点の紹介
  • バックアップと削除のためにリアルタイムでステートメントを検出するMySQLトリガーの考え方の詳細な説明
  • MySQLはイベントを使用してスケジュールされたタスクを完了します
  • MySQL スケジュールタスク (EVENT イベント) を詳細に設定する方法
  • MySQL の計画タスクとイベント スケジュール例の分析
  • MySQL イベントとトリガーのトピックの絞り込み

<<:  Js クラスの構築と継承のケースの詳細な説明

>>:  Centos8 で Apache httpd2.4.37 を使用して Web サーバーをインストールする詳細な手順

推薦する

CentOS 8が利用可能になりました

CentOS 8 が利用可能になりました! CentOS 8 と RedHat Enterprise...

ローカルアイデアアクティベーションサーバーの構築に関する詳細なチュートリアル

序文ブロガーはアイデアIDEを使用しています。アイデア公式が最近サードパーティのアクティベーションサ...

MySQL 8.0.11 Community Green Edition の Windows 用インストール手順図

このチュートリアルでは、インストールに最新の MySQL コミュニティ グリーン バージョンである ...

Vue3 のレンダリング関数における互換性のない変更の詳細な説明

目次レンダリングAPIの変更レンダリング関数のパラメータレンダリング関数のシグネチャの変更VNode...

JavaScript で一意の ID を生成するいくつかの方法

考えられる解決策1. Math.randomは[0,1)の範囲の乱数を生成します。 //今回は生成さ...

Linux 環境の Apache で https サービスを有効にする方法の詳細な説明

この記事では、Linux 環境の Apache で https サービスを有効にする方法について説明...

SQLと各種NoSQLデータベースの使用シナリオの説明

SQL はメイントランクです。なぜ私はこのように理解するのでしょうか。技術的な観点からリレーショナル...

MySQLスタートアップが起こした事故の実録

目次背景MySQLが完全に起動したかどうかを確認する方法事故最初の変更2回目の改訂要約するMySQL...

モバイルの赤い封筒の雨機能ページを実装するための JavaScript HTML

この記事の例では、モバイル紅包雨機能ページを実現するためのHTMLの具体的なコードを共有しています。...

MySQL 5.7.17 最新インストールチュートリアル(画像とテキスト付き)

mysql-5.7.17-winx64 は MySQL の最新バージョンです。インストールは無料で...

Linux の EXT シリーズファイルシステムフォーマットの詳細な説明

Linux ファイルシステム一般的なハードディスクは上図のとおりです。各ディスクは複数のトラックに分...

CentOS 7 で PHP 5.4 を 5.6 にアップグレードする方法の簡単な分析

1.ターミナルに入ったらPHPのバージョンを確認するphp -v出力は次のようになります。 PHP ...

Windows 7 環境での Docker 高速ビルドと Alibaba Cloud コンテナ高速化構成の詳細な説明

前回の Docker に関する記事では、MAC システムでの構築について説明しました。この記事では、...

プロファイルを使用して遅い SQL を分析する MySQL の詳細な説明 (グループ左結合はサブクエリよりも効率的です)

プロファイルを使用して遅いSQLを分析するMySQL の SQL パフォーマンス アナライザーの主な...

リンクAの意味論、書き方、ベストプラクティス

リンク A のセマンティクス、ライティング スタイル、およびベスト プラクティス。私は JavaEy...