【MySQL】一定期間、特定の日付より以前のレコードを削除する cron設定有

低スペックのサーバを運用していると数十万行のレコードがあると重くなったりする場合があります。
そんなときに役立つSQL文をまとめました。

特定の日付より以前のレコードを削除

DELETE FROM [テーブル名] WHERE [日付カラム] < '2019-01-01 00:00:00';

一定期間が過ぎたら削除

例:現在から1カ月経過したデータは削除

DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 1 MONTH));

例:現在から半年経過したデータは削除

DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 6 MONTH));

例:現在から1年経過したデータは削除

DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 1 YEAR));

コマンド

例:現在から1カ月経過したデータは削除

mysql --user=[ユーザー名] --password=[パスワード] --database=[DB名] --execute="DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 1 MONTH))"

例:現在から半年経過したデータは削除

mysql --user=[ユーザー名] --password=[パスワード] --database=[DB名] --execute="DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 6 MONTH))"

例:現在から1年経過したデータは削除

mysql --user=[ユーザー名] --password=[パスワード] --database=[DB名] --execute="DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 1 YEAR))"

cron設定

cronの仕様
分 時 日 月 曜日 コマンド
※曜日は日(0)-土(6)

例:毎日3時に実行 現在から1カ月経過したデータは削除

0 3 * * * mysql --user=[ユーザー名] --password=[パスワード] --database=[DB名] --execute="DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 1 MONTH))"

例:毎週日曜日3時に実行 現在から半年経過したデータは削除

0 3 * * 0 mysql --user=[ユーザー名] --password=[パスワード] --database=[DB名] --execute="DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 6 MONTH))"

例:毎月1日に実行 現在から1年経過したデータは削除

0 0 1 * * mysql --user=[ユーザー名] --password=[パスワード] --database=[DB名] --execute="DELETE FROM [テーブル名] WHERE ([日付カラム] < DATE_SUB(CURDATE(), INTERVAL 1 YEAR))"

シェアする

  • このエントリーをはてなブックマークに追加

フォローする