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データベースを使用するための実装コード

推薦する

JavaScriptの無限ループを検出して防止する方法の詳細な説明

目次序文for文の無限ループを修正while文の無限ループを修正要約する序文Js デッド ループはど...

HTMLヘッダータグの使用に関する詳細な説明

HTMLはヘッドとボディの2つの部分で構成されています** ヘッド内のタグはヘッドタグです** タイ...

HTML マークアップ言語 - テーブルタグ

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

CentOS 7にMySQLをインストールする詳細な手順

CentOS7では、MySQLをインストールすると、MariaDBもデフォルトでインストールされます...

WeChatアプレットAmapマルチポイントルート計画プロセス例の詳細な説明

電話Amap API を呼び出す方法は? Amap が https://lbs.amap.com/a...

リモートDockerを使用した統合テスト環境の構築手順

需要背景チームには統合テストが必要であり、そのためには、mysql や rabbitmq などのミド...

MySQL でのフィルター条件なしのカウントの詳細な説明

カウント(*)成し遂げる1. MyISAM: テーブル内の行の総数をディスク上に保存し、フィルタリン...

Webデザインチュートリアル(5):Webビジュアルデザイン

<br />前回の記事:Webデザイン講座(4):素材と表現について Webデザイン上級...

MySQLソートにおけるCASE WHENの使用例

序文以前のプロジェクトでは、SQL の CASE WHEN ソート関数が使用されました。ではブログメ...

js は、Element の入力コンポーネントのいくつかの機能を実装し、それをコンポーネントにカプセル化します (サンプルコード)

現在実装されているのは、基本的な使用方法、クリア可能なボックス、パスワードボックスです。参考リンク:...

スローモーションアニメーション効果を実現するJavaScript

この記事では、スローモーションアニメーション効果を実現するためのJavaScriptの具体的なコード...

40 CSS/JSスタイルと機能的な技術処理

1-ドロップダウン選択ボックスのスタイル設定 - ドロップダウン リストを変更します。 2- <...

mysqlはエクスポートされたデータのsqlファイルから指定されたテーブルのみをインポートすることを実装します

シナリオ昨日、システムは dbAll.sql.gz という名前の特定のデータベースのすべてのテーブル...

Docker MQTT のインストールと使用のチュートリアル

MQTT の紹介MQTT (Message Queuing Telemetry Transport)...

Nginx サーバーが Systemd カスタム サービス プロセス分析を追加

1. nginxを例に挙げるyumコマンドを使用してNginxをインストールしましたSystemd ...