ApsaraDB RDS for MySQL インスタンスで、統計レポートの定期的な送信、データの同期、期限切れデータの削除などのスケジュールされたタスクまたは定期的なタスクを実行するには、イベントスケジューラ機能を使用してデータベースで定義されたイベントを実行できます。
要件
特権アカウント、標準アカウント (読み取り/書き込み)、または標準アカウント (DML のみ) など、ターゲットデータベースに対する EVENT 権限を持つ ApsaraDB RDS for MySQL アカウントを作成している必要があります。
ステップ 1: イベントスケジューラを有効にする
まず、スケジュールされたタスクを作成する前に、イベントスケジューラが有効になっていることを確認します。
ApsaraDB RDS コンソールにログインし、[インスタンス] ページに移動します。上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。次に、RDS インスタンスを見つけてインスタンス ID をクリックします。
左側のナビゲーションウィンドウで、パラメーターの設定 をクリックします。
値のリスト / 範囲 ページで、
event_schedulerを検索し、適用中のパラメーター値 が ON に設定されていることを確認します。パラメーター値を変更した場合は、変更の送信 をクリックし、表示されるダイアログボックスで 今すぐ有効化する を選択して、[OK] をクリックします。
ステップ 2: スケジュールされたタスクを作成する
DMS コンソールでスケジュールされたタスクを作成する
ページの右上隅にある データベースにログイン をクリックして、DMS のクイックログインページに移動します。RDS MySQL アカウントを使用して RDS MySQL インスタンスにログインします。詳細については、「DMS を使用して ApsaraDB RDS データベースにログインする」をご参照ください。
説明データベースインスタンスにログインするときは、[コントロールモード] を [柔軟な管理] として選択します。DMS コントロールモードの詳細については、「コントロールモード」をご参照ください。
[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;SQL ウィンドウのビジュアル操作エリアで、[プログラマブルオブジェクト] をクリックし、[イベント] を右クリックして、[作成 (イベント)] を選択します。

[作成 (イベント)] タブで、イベントパラメーターを設定します。
この例では、[イベント名] は test01 に、[スケジュールタイプ] は [定期的な時間] に、[間隔] は 10 分に、[イベントステートメント] はテストテーブル students にデータを挿入するように設定されています。イベントパラメーターの詳細については、「イベントパラメーターの説明」の表をご参照ください。
イベントステートメントの例:
begin INSERT INTO students(name) VALUES('zhangsan'); end[保存] をクリックします。表示される [変更を送信] ダイアログボックスで、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 コンソールでスケジュールされたタスクを削除する
定期的なイベントを作成するときに [有効期限切れ時に削除] と [終了時間] を設定した場合、定期的なイベントは有効期限が切れると自動的に削除されます。手動で削除する必要はありません。
[プログラマブルオブジェクト] > [イベント] で、ターゲットイベントを右クリックし、[削除 (イベント)] を選択します。
表示されるダイアログボックスで、[直接実行] をクリックします。
SQL ウィンドウで DROP EVENT <event name>; コマンドを実行して、対応するイベントを削除することもできます。
SQL 文を使用してスケジュールされたタスクを削除する
DROP EVENT <event name>; コマンドを実行して、対応するイベントを削除します。