2009-05-01 8 views
14

私は、集中ログシステムとしてmysqlサーバを使用していて、定期的に3か月以上経過したテーブルエントリを削除するジョブを持っています。これを行う最善の方法は何ですか?mysqlデータベースで3か月以上経過していない行を削除するジョブ

ありがとうございます。そして、「私はデータベース上で複数回実行したい、クライアントに依存しないコードを持っている、と私は出力を確認する必要はありません」、あなたの質問に言い換え

+0

[テーブルのデータを24時間後に自動的にmysqlテーブルからデータの行を削除するにはどうすればよいですか?](https://stackoverflow.com/questions/44253746/how-do-i-deleterows- of-data-from-mysql-table-automatically-with-24時間後) – Alexander

答えて

-1

を-hinling

答えは「ストアドプロシージャを書き、それを定期的にどのクライアントからでも呼び出す」というものです。

59

アイテムが作成された日付をフィールドに保存していますか?

そうであれば、

DELETE FROM myTable WHERE dateEntered < DATE_SUB(NOW(), INTERVAL 3 MONTH); 

が動作するはずです...

あなたがスケジュールされたタスク/ cronジョブでそれを実行することができます...

+4

あなたの投稿をnecroにするつもりはありませんが、これは確かに私のトンを助けました。ありがとうございます – Eon

2

簡単な方法は、スケジュールされたジョブになりますこれは毎晩実行され、ストアドプロシージャを呼び出して3か月より古い行をすべて削除します。あなたのO/Sに応じて、それは簡単に行うべきです。それは毎晩やって、削除されたデータの量は1ヶ月に一度それを行うほどではありません。

これまで私のSPには、その時に不要なデータを削除するためのデータが挿入されていたので、基本的に行が挿入されるたびに、挿入後すぐに 'cleanup' procそれは少しのメンテナンスをしました。これは私の最初の選択ではありませんが、挿入物の数が少なく、削除が速く(ユーザーを遅くしたくない)場合には可能です。この副作用は、データが常に(つまり、すべてのデータは常に< = 3か月前)ですが、アプリ内で重要かどうかはわかりません。

チャンスがある場合は、他の目的のためにいつかデータを保存することをお勧めします。私は常にこれを行うと、あなたはあなたがデータを保存していることを知っていないマネージャーが突然それの緊急の必要性があります....彼らのために。

+0

パフォーマンス上の理由から、データベースを小さく保つためにデータを削除すると仮定します。削除したデータをテーブルまたはデータベースに移動すると問題はありますか? – TimNguyenBSM

3

MySQL 5.1はEventsをサポートします。私は実際にそれらを自分で使っていないので、私はそれらを保証しません。しかし、あなたがしたいのは、DELETE文を定期的に実行することだけです。十分にうまくいくと思います。

+0

イベントを作成する 'prune_table' スケジュールは5分ごとに から削除しますか?myTable WHEREタイムスタンプ Vincent

関連する問題