毎日真夜中に実行するようにスケジュールされた MySQL イベントがあります。しかし、データベース サーバーは毎日夕方にシャットダウンされ、毎朝再起動されますが、必ずしも同時にではありません。たとえば、サーバーは午前 10 時に開始されます。午前 12 時にスケジュールされていましたが、その日のイベントを実行する必要があります。このシナリオを ORACLE でテストしたところ、うまくいきましたが、MySQL ではうまくいきませんでした。提案はありますか?
前もってありがとう、アビラッシュ
毎日真夜中に実行するようにスケジュールされた MySQL イベントがあります。しかし、データベース サーバーは毎日夕方にシャットダウンされ、毎朝再起動されますが、必ずしも同時にではありません。たとえば、サーバーは午前 10 時に開始されます。午前 12 時にスケジュールされていましたが、その日のイベントを実行する必要があります。このシナリオを ORACLE でテストしたところ、うまくいきましたが、MySQL ではうまくいきませんでした。提案はありますか?
前もってありがとう、アビラッシュ
この動作の直接的なサポートは、バグ #46813で機能リクエストとして送信されました。まだ「トリアージ待ち」です。
イベント スケジューラは、見逃したイベントを定期的にチェックし、追いつくことができる必要があります。この方法で実行する必要があるイベントは、Windows ではタスク スケジューラを使用し、Mac および *nix では anacron を使用してスケジュールできますが、これは洗練されておらず、プラットフォームに依存します。
バグ レポートが示唆するように、MySQL の外部にあるソフトウェアを使用して、そのようなイベントをスケジュールできます。または、MySQL のinit-file
オプションを使用して、起動時に実行するコマンドを含むファイルを指定することもできます。それを使用して、テーブルをチェックできます。列をイベントスケジュールとINFORMATION_SCHEMA.EVENTS
比較し、スケジュールされたイベントが見逃された場合に実行します。LAST_EXECUTED
EVENT_DEFINITION
1時間ごとに発生するイベントを作成できます。イベントの発生に関する情報を格納するための追加のテーブルを作成します。
イベントで次の手順を実行します。
申し訳ありませんが、MySQL はこれを処理しません。イベントを見逃すと、見逃されます。後で再実行しようとはしません。
あなたができることは、イベントが最後に実行されたとき (日付) をログに記録するテーブルを作成し、それを 1 時間ごとにスケジュールしますが、実行する前に、その日に既に実行されているかどうかを確認します。そうすれば、真夜中以降に初めて実行されたときにアクティブになります。