MySQL イベントスケジューラ

MySQLMySQLBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、MySQL イベントスケジューラを使用してタスクを自動化する方法を学びます。この実験では、イベントスケジューラを有効にし、テーブル内のデータを定期的に更新するイベントを作成し、イベントの実行状態を確認し、最後にイベントを削除する手順を案内します。

最初のステップは、MySQL サーバーに接続し、SQL コマンドを使用してイベントスケジューラを有効にすることです。有効化の前後でスケジューラの状態を確認します。その後、テーブルを定期的に更新するイベントを作成します。次に、この実験ではイベントの実行状態を確認する方法、そして最後に不要になったイベントを削除する方法を案内します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/BasicKeywordsandStatementsGroup(["Basic Keywords and Statements"]) mysql(("MySQL")) -.-> mysql/SystemManagementToolsGroup(["System Management Tools"]) mysql/BasicKeywordsandStatementsGroup -.-> mysql/use_database("Database Selection") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_database("Database Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_table("Table Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/drop_table("Table Removal") mysql/BasicKeywordsandStatementsGroup -.-> mysql/select("Data Retrieval") mysql/BasicKeywordsandStatementsGroup -.-> mysql/insert("Data Insertion") mysql/BasicKeywordsandStatementsGroup -.-> mysql/update("Data Update") mysql/SystemManagementToolsGroup -.-> mysql/show_status("Status Overview") mysql/SystemManagementToolsGroup -.-> mysql/show_variables("Configuration Overview") subgraph Lab Skills mysql/use_database -.-> lab-550906{{"MySQL イベントスケジューラ"}} mysql/create_database -.-> lab-550906{{"MySQL イベントスケジューラ"}} mysql/create_table -.-> lab-550906{{"MySQL イベントスケジューラ"}} mysql/drop_table -.-> lab-550906{{"MySQL イベントスケジューラ"}} mysql/select -.-> lab-550906{{"MySQL イベントスケジューラ"}} mysql/insert -.-> lab-550906{{"MySQL イベントスケジューラ"}} mysql/update -.-> lab-550906{{"MySQL イベントスケジューラ"}} mysql/show_status -.-> lab-550906{{"MySQL イベントスケジューラ"}} mysql/show_variables -.-> lab-550906{{"MySQL イベントスケジューラ"}} end

イベントスケジューラを有効にする

このステップでは、MySQL のイベントスケジューラを有効にします。イベントスケジューラは、予定されたイベントを実行するバックグラウンドスレッドです。デフォルトでは無効になっています。イベントを作成して実行するには、これを有効にする必要があります。

まず、mysql クライアントを使用して MySQL サーバーに接続しましょう。ターミナルを開き、次のコマンドを実行します。

mysql -u root -p

ルートパスワードの入力を求められます。MySQL インストール時に設定したパスワードを入力してください。パスワードを設定していない場合は、Enter キーを押してください。

これで MySQL サーバーに接続したので、イベントスケジューラの現在の状態を確認できます。次の SQL クエリを実行します。

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

次のような出力が表示されるはずです。

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| event_scheduler  | OFF   |
+------------------+-------+
1 row in set (0.00 sec)

これにより、イベントスケジューラが現在無効になっていることが確認できます。

イベントスケジューラを有効にするには、次の SQL クエリを実行します。

SET GLOBAL event_scheduler = ON;

このコマンドにより、イベントスケジューラがグローバルに有効になります。

次に、イベントスケジューラが有効になっていることを確認しましょう。同じ SHOW GLOBAL VARIABLES クエリを再度実行します。

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

今度は次のような出力が表示されるはずです。

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| event_scheduler  | ON    |
+------------------+-------+
1 row in set (0.00 sec)

これにより、イベントスケジューラが現在有効になっていることが確認できます。

最後に、exit と入力して Enter キーを押して、MySQL クライアントを終了します。

exit

これで MySQL のイベントスケジューラを正常に有効にしました。次のステップでは、データを定期的に更新するイベントを作成します。

データを定期的に更新するイベントを作成する

このステップでは、テーブルを定期的に更新する MySQL イベントを作成します。まず、データベースとテーブルを作成する必要があります。その後、テーブルを毎分更新するイベントを作成します。

まず、mysql クライアントを使用して MySQL サーバーに接続しましょう。ターミナルを開き、次のコマンドを実行します。

mysql -u root -p

パスワードの入力を求められたら、ルートパスワードを入力してください。

次に、test_db という名前のデータベースを作成しましょう。

CREATE DATABASE IF NOT EXISTS test_db;

次に、test_db データベースに切り替えます。

USE test_db;

次に、id(INT 型、主キー、自動インクリメント)と value(INT 型)の 2 つの列を持つ event_table という名前のテーブルを作成しましょう。

CREATE TABLE IF NOT EXISTS event_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    value INT
);

テーブルに初期値を挿入しましょう。

INSERT INTO event_table (value) VALUES (0);

次に、イベントを作成しましょう。このイベントは、event_table テーブルの value 列を毎分更新します。次の SQL 文を実行します。

CREATE EVENT IF NOT EXISTS update_event
ON SCHEDULE EVERY 1 MINUTE
DO
  UPDATE event_table SET value = value + 1;

この文は、update_event という名前のイベントを作成します。ON SCHEDULE EVERY 1 MINUTE 句は、イベントが毎分実行されることを指定します。DO 句は、イベントが実行されたときに実行する SQL 文を指定します。この文では、value 列を 1 増やします。

イベントが作成されたかどうかを確認するには、次の SQL クエリを実行します。

SHOW EVENTS FROM test_db;

次のような出力が表示されるはずです。

+----------+---------------+-------------+-----------+----------+---------------------+---------------------+-----------+------------+-------------------+----------------------+--------------------+--------------------+
| Db       | Name          | Definer     | Time zone | Type     | Execute at          | Interval_value      | Interval_field | Starts              | Ends               | Status             | Originator          | character_set_client | collation_connection | db_collation         |
+----------+---------------+-------------+-----------+----------+---------------------+---------------------+-----------+------------+-------------------+----------------------+--------------------+--------------------+
| test_db  | update_event  | root@%      | SYSTEM    | RECURRING | NULL                | 1                   | MINUTE       | 2024-10-27 14:30:00 | NULL              | ENABLED            | 1                    | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci   |
+----------+---------------+-------------+-----------+----------+---------------------+---------------------+-----------+------------+-------------------+----------------------+--------------------+--------------------+
1 row in set (0.00 sec)

これにより、イベントが作成され、有効になっていることが確認できます。

次に、MySQL クライアントを終了します。

exit

これで、イベントは毎分実行され、event_table テーブルの value 列を更新します。次のステップでは、イベントの実行状態を確認します。

イベントの実行状態を確認する

このステップでは、前のステップで作成したイベントの実行状態を確認します。MySQL サーバーに接続し、event_table をクエリして、value 列が更新されているかどうかを確認します。イベントは毎分実行されるため、時間の経過とともに値が増加しているはずです。

まず、mysql クライアントを使用して MySQL サーバーに接続しましょう。

mysql -u root -p

パスワードの入力を求められたら、ルートパスワードを入力してください。

次に、test_db データベースに切り替えます。

USE test_db;

次に、event_table をクエリして、value 列の現在の値を確認しましょう。

SELECT * FROM event_table;

次のような出力が表示されるはずです。

+----+-------+
| id | value |
+----+-------+
|  1 |     N |
+----+-------+
1 row in set (0.00 sec)

ここで、N は整数値です。イベントは毎分実行されるため、N の値は前のステップで挿入した初期値 0 より大きくなるはずです。もしイベントを作成したばかりの場合は、1、2 分待ってから再度クエリを実行してください。値が増加しているのが確認できるはずです。

イベントの実行をさらに検証するには、MySQL のエラーログを確認して、イベントに関連するエラーがないかを確認できます。ただし、この実験では、value 列が更新されていれば、イベントが正常に実行されていると仮定します。

SELECT クエリを複数回実行し、各実行の間に 1 分待つことで、value 列の値が増加するのを観察できます。これにより、イベントが期待通りに実行されていることが確認できます。

最後に、MySQL クライアントを終了します。

exit

これで、イベントの実行状態を正常に確認しました。次のステップでは、イベントを削除します。

イベントを削除する

このステップでは、前のステップで作成したイベントを削除します。イベントを削除すると、そのイベントは MySQL サーバーから削除され、再度実行されなくなります。

まず、mysql クライアントを使用して MySQL サーバーに接続しましょう。

mysql -u root -p

パスワードの入力を求められたら、ルートパスワードを入力してください。

次に、test_db データベースに切り替えます。

USE test_db;

次に、update_event という名前のイベントを削除しましょう。次の SQL 文を実行します。

DROP EVENT IF EXISTS update_event;

この文は、イベントが存在する場合にそれを削除します。IF EXISTS 句は、イベントが存在しない場合にエラーが発生するのを防ぎます。

イベントが削除されたことを確認するには、次の SQL クエリを実行します。

SHOW EVENTS FROM test_db;

結果セットが空になり、test_db データベースにイベントが存在しないことを示すはずです。

Empty set (0.00 sec)

あるいは、一覧に update_event が表示される場合は、イベントが正常に削除されていないことを意味します。SQL 構文を確認して、再度試してください。

最後に、MySQL クライアントを終了します。

exit

これで、イベントを正常に削除しました。これでこの実験は終了です。イベントスケジューラを有効にする方法、データを定期的に更新するイベントを作成する方法、イベントの実行状態を確認する方法、およびイベントを削除する方法を学びました。

まとめ

この実験では、最初のステップでは MySQL イベントスケジューラ(予定されたイベントを実行するバックグラウンドスレッド)を有効にすることに焦点を当てています。これには、mysql クライアントを使用して MySQL サーバーに接続し、イベントスケジューラの現在の状態(初期状態では無効)を確認し、SET GLOBAL event_scheduler = ON; コマンドを使用して有効にすることが含まれます。event_scheduler グローバル変数を再度確認することで、有効化が成功したことが確認できます。

次のステップでは、定期的にテーブルを更新する MySQL イベントの作成方法を紹介します。これには、イベントのスケジュールと実行する SQL 文を定義することが含まれます。