MySQL イベント スケジューラに関するよくある話 (必読)

MySQL イベント スケジューラに関するよくある話 (必読)

概要

MySQL には独自のイベント スケジューラもあり、これは Linux の crontab ジョブとして簡単に理解できます。ただし、SQL アプリケーションの場合は、より完全な機能があり、メンテナンスが容易です。個人的には、あまり多く作成すると DB のパフォーマンスに影響したり、デバッグが困難になる可能性があると感じています。

MySQLイベントスケジューラの主な内容

メインスイッチ

パラメータevent_schedulerはイベントスケジューラのマスタースイッチです。一般的には、ONまたはOFFに設定できます。無効に設定することはお勧めしません。ONに設定すると、show processlistでスレッドを確認できます。


作成、変更、表示などの構文

イベントの作成方法と変更方法についてはここでは説明しません。作成構文は次のとおりです。具体的な意味については、次のイベント情報テーブルの紹介を参照してください。公式ウェブサイトのドキュメントリンク http://dev.mysql.com/doc/refman/5.6/en/create-event.html も参照できます。


作成されたイベントを表示するには、現在のデータベースにアクセスした後、show create event xxx\G を使用します。



情報クエリとイベントの意味

イベントのステータス情報を表示するには、mysql.event または information_schema.events を表示するか、現在の DB に切り替えて show events を実行します。3 つの内容は基本的に同じです。information_schema はデータのコピーを作成できません。次の名前と開始時刻は、読みやすくするために変更されています。ここでは、information_schema.eventsの情報を例に挙げて説明します。


EVENT_CATALOG:一般的には、

EVENT_SCHEMA:イベントが配置されているスキーマ

EVENT_NAME:イベントの名前

DEFINER:イベントの定義者。これは、イベントを定義するときの selectcurrent_user() のデフォルトの結果と一致します。ユーザーにスーパー権限がある場合は、別のユーザーを指定できます。

TIME_ZONE:イベントで使用されるタイムゾーン。デフォルトはシステムです。変更しないことをお勧めします。

EVENT_BODY:通常はSQLなので気にしないでください

EVENT_DEFINITION:イベントの内容は、挿入などの特定のSQL、またはストアドプロシージャを呼び出す操作です。

EVENT_TYPE:このパラメータは非常に重要で、定義時に指定します。RECURRING と ONE TIME の 2 つの値があります。RECURRING は、条件が満たされる限りイベントが繰り返し実行されることを意味し、ONE TIME は 1 回だけ呼び出されます。

EXECUTE_AT: 1 回限りのイベントに有効です。RECURRING イベントの場合は、通常 NULL となり、イベントの推定実行時間を示します。

INTERVAL_VALUE: RECURRING タイプのイベントに有効で、実行間隔の長さを示します。

INTERVAL_FIELD: RECURRINGタイプのイベントに有効で、実行間隔の単位(通常はSECOND、DAYなど)を示します。詳細については、作成構文を参照してください。

SQL_MODE:現在のイベントで使用されるSQL_MODE

STARTS: RECURRING タイプのイベントに有効で、1 回限りの EXECUTE_AT 関数と同様に、イベントの実行が開始される時点を示します。 NULL は条件が満たされるとすぐに実行が開始されることを意味します。

ENDS: RECURRING タイプのイベントに有効で、イベントの実行が停止する時点を示します。NULL の場合、イベントは停止しません。

STATUS:一般的に、ENABLED、DISABLED、SLAVESIDE_DISABLED の 3 つの値があります。ENABLED はイベントをアクティブにすることを意味します。他の条件が満たされている限り、イベントは実行されます。DISABLED 状態は、イベントが実行されないことを意味します。SLAVESIDE_DISABLED は、スレーブ ライブラリでイベントが実行されないことを意味します。マスター データベースがイベントを一度実行し、それをスレーブ データベースにコピーしてから、スレーブ データベースで再度実行すると、データの一貫性が失われるため、スレーブ データベースでいかなる形式のイベントも実行しないように特に注意する必要があります。一般的には、スレーブ データベースでメイン スイッチ event_scheduler を無効にするだけで済みます。

ON_COMPLETION: 値はPRESERVEとNOT PRESERVEの2つだけです。PRESERVE

作成日時: イベントが作成された日時

LAST_ALTERED: イベントが最後に変更された時刻

LAST_EXECUTED: イベントが最後に実行された時刻。NULL の場合は、イベントが一度も実行されていないことを意味します。

EVENT_COMMENT: イベントコメント情報

ORIGINATOR: 現在のイベントが作成された際のサーバーID。マスターとスレーブでの処理に使用されます(SLAVESIDE_DISABLEDなど)。

CHARACTER_SET_CLIENT: イベントが作成されたときのクライアント文字セット、つまりcharacter_set_client

COLLATION_CONNECTION: イベント作成時の接続文字検証ルール、つまりcollat​​ion_connection

DATABASE_COLLATION: イベント作成時のデータベース文字セット検証ルール

イベント権限管理

1 event_schedulerシステム変数を設定するにはsuper_priv権限が必要です

2 イベントの作成、変更、削除には、スキーマ レベルのユーザーの EVENT 権限が必要です。

3 イベントの具体的な内容に応じて、対応する権限が必要となります。たとえば、イベント内のテーブルに挿入操作がある場合、ユーザーはテーブルを挿入する必要があります。そうでない場合、LAST_EXECUTED は常に NULL になります。

イベントステータスクエリ

DBが起動してからのイベント関連の統計を表示するには、次のコマンドを使用します。

mysql> '%event%' のようなグローバルステータスを表示します。

+--------------------------+-------+

|変数名 | 値 |

+--------------------------+-------+

|Com_alter_event | 0 |

|Com_create_event | 2 |

|Com_drop_event | 2 |

|Com_show_binlog_events | 0 |

|Com_show_create_event | 191 |

|Com_show_events | 40 |

|Com_show_relaylog_events | 0 |

+--------------------------+-------+

セット内の行数は 7 です (0.00 秒)

使用方法の提案

1 マスターがすでにイベントを実行した場合、スレーブはイベントが実行されないようにする必要があります(スレーブ上でイベントが意図的に作成されない限り)

2. mysql.event テーブルを直接操作して作成、削除などの操作を行うことは固く禁じられています。代わりに、create などの通常の構文を通じて実装する必要があります。そうしないと、メタデータの混乱が発生し、イベントが実行されなかったり、繰り返し実行されたりするなど、さまざまな説明のつかない問題が発生します。現時点では、唯一の解決策は DB を再起動することです。

3 作成するイベントに大量のデータ変更が含まれる場合は、既存のネットワーク サービスに影響を与えないことを確認するために十分なテストを実施する必要があります。

4 イベントを含む DB をバックアップする必要がある場合は、mysqldump を実行するときに --event パラメータを追加する必要があります。

私が皆さんにお伝えしたいのは、上記の記事「MySQL イベント スケジューラ (必読)」だけです。これが皆さんの参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL の計画タスクとイベント スケジュール例の分析
  • MySQL スケジュールタスク (イベント スケジューラ) イベント スケジューラの概要
  • MySQL スケジュールタスク (EVENT イベント) を詳細に設定する方法
  • MySQLのイベントスケジューラEVENTを理解する
  • MySQL イベント変更イベント (ALTER EVENT)、イベントの無効化 (DISABLE)、イベントの有効化 (ENABLE)、イベント名の変更、およびデータベース イベントの移行操作の詳細な説明
  • mysql スケジュールタスク (イベント イベント) の詳細な説明
  • MySQL binlog のイベントタイプの詳細な説明
  • MySQL イベント スケジューラを使用したスケジュールされたタスクの作成の詳細な説明
  • MySQL でスケジュールされたイベント スケジュールを作成する手順を説明します。
  • MySQL イベント スケジューラの使用の概要
  • mysqlイベントの有効化と呼び出し
  • MySQLはイベントを使用してスケジュールされたタスクを完了します

<<:  Vue でよく使われる高階関数と包括的な例

>>:  Dockerでmongodbデータベースを使用するための実装コード

推薦する

SqlクエリMySqlデータベーステーブル名と説明テーブルフィールド(列)情報

以下では、SQL クエリ ステートメントを使用して、Mysql データベース内のテーブルのテーブル名...

Windows での MySQL 8.0.11 インストール チュートリアル

この記事は、WindowsでのMySQL 8.0.11のインストールチュートリアルを記録しています。...

IE6では画像要素imgに余分な空白スペースがある

ページの DIV+CSS レイアウトを行う際、IE6 で画像要素 img の下に余分なスペースができ...

Dockerデータのバックアップとリカバリプロセスの詳細な説明

データのバックアップ操作は非常に簡単です。次のコマンドを実行します。 docker run --vo...

Jenkins の Docker のデプロイとインストール手順

まず、Docker がインストールされたサーバーが必要です。 (私はすでにこれをサーバーにインストー...

Win10 構成 Tomcat 環境変数チュートリアル図

設定する前に、次の操作を行う必要があります。 1. まずjdk bloggerをインストールします。...

MySQL データベースの基本的な SQL ステートメントの概要

この記事では、例を使用して、Mysql データベースの基本的な SQL ステートメントについて説明し...

MySQLログシステムの詳細情報共有

大規模なシステムに取り組んだことがある人なら誰でも、ログの役割を過小評価してはならないことを知ってい...

ウェブサイトにダークモード切り替え機能を持たせるための純粋なCSSフリー実装コード

序文ダーク モードの概念は、 MacOS系統のMojaveに由来し、ユーザーが選択できる 2 つのス...

three.js を使って立体的な矢印線を描く詳細な手順

需要: この需要は緊急に必要です!地下鉄のシーンでは、脱出経路を示す矢印を描かなければなりません。こ...

Docker を使用して Nginx+Flask+Mongo アプリケーションをデプロイする

サーバーにはNginx、データベースサポートにはMongo、Python言語のWebフレームワークに...

CentOS での MySQL ログイン 1045 問題を解決する

アプリケーション全体を CentOS にデプロイする必要があるため、当然ながらデータベース操作は不可...

CSS3 パッケージ化後にプレフィックスプラグインを自動的に追加する方法の詳細な説明: autoprefixer

vue-cli で構築されたプロジェクト スキャフォールディングでは、すでに autoprefix...

JSはキャンバス技術を使用してeChartsの棒グラフを模倣します

Canvas は HTML5 の新しいタグです。js を使用して Canvas 描画 API を操作...

Apache POIの基本的な使い方の詳しい説明

目次基本的な紹介入門テスト (Excel ファイルからのデータの読み取り)ステップ1: Maven座...