すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:ApsaraDB RDS for MySQL でスケジュールされたタスクを作成する

最終更新日:Nov 09, 2025

ApsaraDB RDS for MySQL インスタンスで、統計レポートの定期的な送信、データの同期、期限切れデータの削除などのスケジュールされたタスクまたは定期的なタスクを実行するには、イベントスケジューラ機能を使用してデータベースで定義されたイベントを実行できます。

要件

特権アカウント、標準アカウント (読み取り/書き込み)、または標準アカウント (DML のみ) など、ターゲットデータベースに対する EVENT 権限を持つ ApsaraDB RDS for MySQL アカウントを作成している必要があります。

ステップ 1: イベントスケジューラを有効にする

まず、スケジュールされたタスクを作成する前に、イベントスケジューラが有効になっていることを確認します。

  1. ApsaraDB RDS コンソールにログインし、[インスタンス] ページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけてインスタンス ID をクリックします。

  2. 左側のナビゲーションウィンドウで、パラメーターの設定 をクリックします。

  3. 値のリスト / 範囲 ページで、event_scheduler を検索し、適用中のパラメーター値ON に設定されていることを確認します。

  4. パラメーター値を変更した場合は、変更の送信 をクリックし、表示されるダイアログボックスで 今すぐ有効化する を選択して、[OK] をクリックします。

ステップ 2: スケジュールされたタスクを作成する

DMS コンソールでスケジュールされたタスクを作成する

  1. ページの右上隅にある データベースにログイン をクリックして、DMS のクイックログインページに移動します。RDS MySQL アカウントを使用して RDS MySQL インスタンスにログインします。詳細については、「DMS を使用して ApsaraDB RDS データベースにログインする」をご参照ください。

    説明

    データベースインスタンスにログインするときは、[コントロールモード][柔軟な管理] として選択します。DMS コントロールモードの詳細については、「コントロールモード」をご参照ください。

  2. [SQLConsole] ウィンドウで、次の SQL 文を実行して、students という名前のテストテーブルを作成します。

    説明

    データベースに既に存在するテーブルを使用する場合は、このステップをスキップして、[イベントステートメント] フィールドで対応する SQL 文を使用できます。

    CREATE TABLE students (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `name` varchar(64) NOT NULL COMMENT '名前',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  3. SQL ウィンドウのビジュアル操作エリアで、[プログラマブルオブジェクト] をクリックし、[イベント] を右クリックして、[作成 (イベント)] を選択します。

    image.png

  4. [作成 (イベント)] タブで、イベントパラメーターを設定します。

    この例では、[イベント名] は test01 に、[スケジュールタイプ][定期的な時間] に、[間隔] は 10 分に、[イベントステートメント] はテストテーブル students にデータを挿入するように設定されています。イベントパラメーターの詳細については、「イベントパラメーターの説明」の表をご参照ください。

    イベントステートメントの例:

    begin
    INSERT INTO students(name) VALUES('zhangsan');
    end

    イベントパラメーターの説明

    分類

    パラメーター

    説明

    基本的なイベント情報

    イベント名

    イベントの名前。

    ステータス

    イベントのステータス。有効な値:

    • 有効: イベントは実行可能です。

    • 無効: イベントは実行不可能です。

    • DB から無効化: イベントはプライマリデータベースでのみ実行できます。

    有効期限切れ時に削除

    • イベントが固定時点で実行された後にイベントを削除するかどうかを指定します。

    • 指定された期間、指定された間隔でイベントが実行された後にイベントを削除するかどうかを指定します。

    コメント

    イベントの注釈。

    実行時間の定義

    スケジュールタイプ

    • 固定時間: イベントは固定時点で 1 回実行されます。このオプションを選択した場合は、[固定時間] を設定する必要があります。

    • 定期的な時間: イベントは指定された間隔で実行されます。このオプションを選択した場合は、[間隔][開始時間]、および [終了時間] を設定する必要があります。

      説明
      • [間隔]: 時間単位の数時間単位で構成され、イベントが実行される間隔を示します。

      • [開始時間]: システムが定期的なイベントの実行を開始する時間。このパラメーターを設定しない場合、システムはすぐにイベントを実行します。

      • [終了時間]: システムが定期的なイベントの実行を停止する時間。このパラメーターを設定しない場合、システムは無限にイベントを実行します。

    イベントステートメント

    なし

    イベントで実行する必要がある SQL 文。

    /**event body**/ を特定の SQL 文に置き換えます。

  5. [保存] をクリックします。表示される [変更を送信] ダイアログボックスで、SQL 文が正しいことを確認し、[直接実行] をクリックします。

    [プログラマブルオブジェクト] > [イベント] で新しいスケジュールされたタスクを表示できます。SQL ウィンドウで SHOW EVENTS; を実行して、スケジュールされたタスクの詳細情報を表示することもできます。

    説明

    SHOW EVENTS; を使用してクエリを実行するときに、イベントのステータスが ENABLED の場合、イベントは有効です。

SQL 文を使用してスケジュールされたタスクを作成する

構文

CREATE
    [DEFINER = user]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    DO event_body;

schedule:
    {
        AT timestamp [+ INTERVAL interval] ...
      | EVERY interval
          [STARTS timestamp [+ INTERVAL interval] ...]
          [ENDS timestamp [+ INTERVAL interval] ...]
    }

interval:
    quantity {
        YEAR
      | QUARTER
      | MONTH
      | DAY
      | HOUR
      | MINUTE
      | WEEK
      | SECOND
      | YEAR_MONTH
      | DAY_HOUR
      | DAY_MINUTE
      | DAY_SECOND
      | HOUR_MINUTE
      | HOUR_SECOND
      | MINUTE_SECOND
    }

たとえば、user_order テーブルの create_time フィールドに各行のデータが書き込まれた時刻が記録されている場合に、毎日 02:00 に user_order テーブルから 30 日前のデータを削除するには、次のようにします。

DELIMITER $$
CREATE EVENT IF NOT EXISTS delete_old_user_orders
ON SCHEDULE
    EVERY 1 DAY
    STARTS TIMESTAMP(CURRENT_DATE, '02:00:00') + INTERVAL 1 DAY -- 翌日の 02:00 に開始
COMMENT -- 毎日 30 日前の注文データを削除
DO
BEGIN
    -- 削除ロジック (create_time は時間フィールド)
    DELETE FROM user_order 
    WHERE create_time < DATE_SUB(NOW(), INTERVAL 30 DAY);
    
    -- オプション: 操作ログを記録 (最初にログテーブルを作成する必要があります)
    -- INSERT INTO task_log (message) VALUES ('古い user_orders を削除しました');
END$$
DELIMITER ;

ステップ 3: スケジュールされたタスクの実行結果を表示する

イベントの実行結果を表示するときに、イベント内の SQL 文の実行を確認できます。

  • SQL 文が正常に実行された場合は、関連するテーブルをチェックして結果を確認できます。

  • SQL 文の実行に失敗した場合は、エラーログを表示して詳細を取得できます。

SQL Explorer を有効にして、ログレコードを通じてスケジュールされたタスクの実行結果を表示できます。

説明

SQL 文 SELECT * FROM information_schema.events; を実行して、既存のスケジュールされたタスクとその関連情報 (作成時間、最終変更時間、最終実行時間、有効かどうかなど) を確認できます。

ステップ 4: スケジュールされたタスクを削除する

DMS コンソールでスケジュールされたタスクを削除する

説明

定期的なイベントを作成するときに [有効期限切れ時に削除][終了時間] を設定した場合、定期的なイベントは有効期限が切れると自動的に削除されます。手動で削除する必要はありません。

  1. [プログラマブルオブジェクト] > [イベント] で、ターゲットイベントを右クリックし、[削除 (イベント)] を選択します。

  2. 表示されるダイアログボックスで、[直接実行] をクリックします。

説明

SQL ウィンドウで DROP EVENT <event name>; コマンドを実行して、対応するイベントを削除することもできます。

SQL 文を使用してスケジュールされたタスクを削除する

DROP EVENT <event name>; コマンドを実行して、対応するイベントを削除します。

リファレンス

Data Management (DMS) とは

よくある質問

Q: ApsaraDB RDS for MySQL のスケジュールされたタスクによって実行される文は、SQL 監査ログに記録されますか?

A: はい、SQL Explorer ログに記録されます。スケジュールされたタスクはデータベースによって内部的に実行されるため、クライアント IP アドレスは % として表示されます。

説明

% として表示されるクライアント IP アドレスは、必ずしもスケジュールされたタスクの実行のレコードを示すわけではありません。ストアドプロシージャ内の SQL 文から来る場合もあります。

Q: ApsaraDB RDS for MySQL でスケジュールされたタスクを作成するときに、システムは関連するテーブルオブジェクトが存在するかどうかをチェックしますか?

A: いいえ、システムはチェックしません。実行中にテーブルが見つからない場合、または他の理由で SQL 文の実行に失敗した場合は、エラーログとスローログを表示して詳細を取得できます。

Q: ApsaraDB RDS for MySQL のスケジュールされたタスクとその最終実行時間を確認するにはどうすればよいですか?

A: 次の SQL 文を実行して information_schema.events テーブルをクエリし、既存のスケジュールされたタスクとその関連情報 (作成時間、最終変更時間、最終実行時間、有効かどうかなど) を確認できます。

SELECT * FROM information_schema.events;