MySQLイベントを実際に使用する

イベントの仕組み MySQLを積極的に使用する人にとって、バージョン5.1以降、MySQLがイベントをサポートすることは秘密ではありません。 クエリを実行する必要がある場合、またはスケジュールに従って個別の手順を実行する必要があり、コンソールの起動からMySQLの組み込み機能に切り替えるのに時間がない場合は、 猫の下で歓迎します。



まず、MySQLのイベントとその準備方法を思い出させてください。

まず、イベントは外部アプリケーションを必要としないため、クロスプラットフォームを提供します。 イベント内で、SQLコマンドを実行するか、事前に作成されたプロシージャを呼び出すことができます。

私たちの場合、ユーザーのリクエストが記録される急速に膨張するテーブルのアーカイブに従事します。



スケジューラーをオンにする



イベント変数は、event_schedulerグローバル変数によって制御されます。 5.1.11以降のMySQLの場合、次の3つの値のいずれかを取ることができます。

OFF0の場合もあります ):スケジューラーは停止しています。 スケジューラスレッドは実行されず、SHOW PROCESSLISTの出力には表示されません。 スケジュールされたイベントは実行されていません。 OFFはevent_schedulerのデフォルト値です。

ON1の場合もあります):スケジューラーは実行中です。 スケジューラスレッドはそれ自体を実行し、スケジュールされたすべてのイベントを実行します。 イベントスケジューラスレッドは、SHOW PROCESSLISTの出力にバックグラウンドプロセスとしてリストされます。

DISABLED :値はスケジューラーを非アクティブにします。 スケジューラスレッドは実行されておらず、SHOW PROCESSLISTの出力には表示されません。



含まれる状態に興味があるので、configに登録する必要があります



event_scheduler=1







またはコマンドを実行する



 SET GLOBAL event_scheduler=ON;
      
      







イベントを作成する



イベント内でプロシージャを呼び出すだけの方が好きでした。 また、アプリケーション自体によって既に作成および起動されているため、これも可能です。)プロシージャを作成しましょう。



 CREATE DEFINER = 'root'@'localhost' PROCEDURE `new_proc`() NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN DECLARE tbl_tmp,tbl_logarch VARCHAR(50); -- tbl_log     --       tbl_log_<>_<> SET tbl_logarch=DATE_FORMAT(CURRENT_TIMESTAMP, '%Y%m%d_%H%i'); SET tbl_tmp=CONCAT("tbl_log_", tbl_logarch); --  SQL     ; SET @archive_query:=CONCAT("CREATE TABLE ", tbl_tmp, " ENGINE=ARCHIVE AS (SELECT * FROM tbl_log)"); --    PREPARE archive_query FROM @archive_query; EXECUTE archive_query; DEALLOCATE PREPARE archive_query; --     ,       DELETE FROM tbl_log; END;
      
      







ここで手順を実行し、機能するかどうかを確認します



 call new_proc();
      
      







すべてが正常な場合は、続行します。 イベントを直接作成します。 簡略化された構文は次のようになります。

CREATE EVENT event_name ON SCHEDULE AT {DATE AND TIME} DO {SQL COMMAND};







または

CREATE EVENT event_name ON SCHEDULE EVERY {X} {SECOND|MINUTE|HOUR|DAY|MONTH|YEAR|WEEK} DO {SQL COMMAND};









週に1回アーカイブする必要があるため、DDLは次のようになります。



 CREATE EVENT `new_event` ON SCHEDULE EVERY 1 WEEK STARTS CURRENT_TIMESTAMP ON COMPLETION NOT PRESERVE ENABLE COMMENT '' DO call new_proc();
      
      







結果を観察します



時間をかけてプレイした結果、作成したイベントが期待どおりに動作することを確信しました。 自動化に向けた別のステップが行われました。 おまけとして、このトピックに関するいくつかの追加資料が研究されました。



PS念のために、私は実用的な部分だけを提示しようとしたという事実に注意を引きます。 したがって、拡張構文、ユーザー権限、MySQLのバージョンに依存する制限の説明を意図的に省略しました。 親愛なるhabracheloveが、上記の指示に従ってイベントを作成して使用することができなかった場合、habrakomentでいつでも書くことができます(答えようとします)か、他の有用なリソースで解決策を見つけます。



材料を書く過程で使用された:

dev.mysql.com/doc/refman/5.1/en/events.html

www.rldp.ru/mysql/mysqlpro/events.htm



UPD:彼らは、フェデレーションテーブルとMySQLプロキシを使用して、イベントプランナーとオペレーティングシステムの相互作用を整理できると言っています。 自分で試したことはありません。 対象者は誰ですか、コメントにplizを書きます。



All Articles