web-dev-qa-db-ja.com

CronjobまたはMySQLイベント?

MySQLデータベースを1時間ごとに更新する必要があり、cronjobとMySQLイベントを使用することの利点/欠点を知りたいのですが?たとえば、どちらが速いですか?どちらが安全ですか?ありがとう!

26

私は常にcronジョブを実行します。

  • Sysadminsが期待するところです(この点を過小評価しないでください)。
  • crobtabは、防弾性能があり、実績があり、非常に広く使用され、理解されている
  • エラー/成功メッセージは、必要な場所に自由に転送/分析できます
  • 一部のデータベースタスクでは、mysqlをオフラインにする必要があります(フルバックアップなど)。そのため、cronを使用する必要があります。一部のタスクをcronで実行し、一部のタスクをmysqlで実行することはお勧めしません。どこを見ればよいかわからない
  • シェルスクリプトがある場合は、その後に続く他のイベントを連鎖させることができます

そして最後に、あなたができる何かをするからといって、それが良い考えだとは限りません。 Mysqlはデータに長けています。 「シェル」などには使用しないでください。

19
Bohemian

MySQL Event Scheduler – cronの良い代替品。

私たちは皆、毎週MySQLデータベースのログテーブルを切り捨てるなど、特定のプロセスをスケジュールする簡単な方法であるcronについて知っています。

MySQL 5.1で、MySQLの人たちは新しいクールな機能、MySQLイベントスケジューラを導入しました。

イベントスケジューラを使用すると、データベースで実行するタスクをスケジュールできます。これは、ホストが許可しないため、ウェブスペースでcronジョブを作成できないウェブデベロッパーに最適です。これは本当にcronの優れた代替品です。

いくつかの例:

毎週アプリケーションログテーブルを切り捨てたい場合、これはイベントスケジュールが次のようになるはずです。

CREATE EVENT PurgeLogTable
ON SCHEDULE EVERY 1 WEEK
DO
BEGIN
DELETE FROM `logs` WHERE `LogTime` <= DATE_SUB(CURRENT_TIMESTAMP,INTERVAL 1 WEEK);
INSERT INTO `audit` (`AuditDate`, `Message`) VALUES(NOW(), "Log table purged succesfully!");
END
19
user2001117

MysqlはCronjobの代わりに使用できるイベントスケジューラーを紹介します。 cronjobには次のような多くの利点があります。

1)Mysqlサーバーに直接書き込まれます。

2)これはプラットフォームに依存しません。アプリケーションは、重要ではない任意の言語で記述されている場合があります。あなただけのmysqlを知る必要があります。

3)定期的にデータベースの更新やクリーンアップが必要な場合はいつでも使用できます。

4)毎回クエリをコンパイルする必要がないため、パフォーマンスが向上します。

5)エラーはログファイルに記録される可能性があります。構文:

DELIMITER //
CREATE EVENT eventName
ON SCHEDULE EVERY 1 WEEK
STARTS 'Some Date to start'
ENDS 'End date If any' 

DO
BEGIN
   // Your query will be here
END//
DELIMITER ;

詳細については、公式サイトをご覧ください: http://dev.mysql.com/doc/refman/5.1/en/create-event.html

詳細ブログ: http://goo.gl/6Hzjvg

8
Suresh Kamrushi

mysqlイベントschedularを使用します

そのために1つの追加ファイルをコーディングする必要がないため、1つのクエリを記述するだけで目的を達成できます。

データベース関連の操作のみが必要な場合は、mysqlイベントschedularが適しています。

1
meet

私は今自分でイベントを扱っており、同じことを考えています:)

上記の回答に加えて:

  • タスクが純粋にデータ中心である場合、またはすでにデータベースに組み込まれている機能を補完する場合は、EVENTを使用します。データのクリーンアップ、特定のイベントのログ記録、特定のデータの集計などを行うトリガーが既にある場合があります。実行するスケジュールされたタスクが既存の設計の一部である場合、EVENTからタスクをトリガーする方がまとまりがあります。 EVENTは、結局のところ一時的なトリガーです。

  • シェルからスクリプトを実行する場合は、シェルスクリプトまたはデフォルトファイルに保存されているユーザー名/パスワードが必要です。 EVENTを実行する場合、EVENTの作成後にユーザー名/パスワードは必要ありません。

  • IMCOストアドプロシージャでロジックを記述する必要があります。次に、イベントまたはシェルスクリプトから、最適な方法でプロシージャを呼び出します。ユーザーがプロシージャを手動で呼び出せるようにするために、UIに場所を構築することもできます。

0
Barend Scholtus

これは長い間質問でしたが、mysqlイベントを使用する利点の1つは、dbms内に直接埋め込まれているため、たとえば、phpを主言語として使用している場合、接続を作成/維持する必要がないことも考えられます。これにより、ステートメントを実行する前にdbへの接続を作成するときに検証の必要性がなくなり、メンテナンススクリプトを実行できるロールを使用してイベントを作成し、それを行わないアプリケーションにユーザーロールを割り当てることができます。ユーザーがこの種の役割しか持っていない場合にアクセスできることがわかっているため、イベントを使用するかcronジョブを使用するかは、作業しているシステムによって異なります。しかし、注意すべきもう1つのことは、特に間隔が単なる差である場合、同じイベントの複数のトリガーであり、5〜10秒ごとなど、ほんの数秒です。

0

Mysqlイベントスケジューラは、共有ホスト環境に有利です。タイミングに関しては、秒単位でスケジュールすることもできます。 cronとは異なり、分単位ですが、この制限を回避できます。

0
CoolRunning