0

1億2000万行のmysqlテーブルがあり、シェルスクリプトを記述して、そのテーブル内の不要な情報の一部を削除し始めたいと考えています。問題は、私がシェルスクリプトに非常に慣れていないことです。

datetimeUNIXタイムスタンプを含む列があります。最近、特定のデータを2か月しか保持できないデータ保持ポリシーを制定してから、過去2か月以内にないすべての行を削除したいと思います。

TL; DR列のUNIXタイムスタンプを使用して、過去2か月のデータまでのすべての行を削除するシェルスクリプトを作成する必要がありdatetimeます。

更新:これが私の新しいシェルスクリプトです

#!/bin/sh

i=1
while [ "$i" -ne 0 ]
do
  i=mysql -h 127.0.0.1 -u halo_ylh -pCa5d8a88 halo_twittstats < mysqlpurge.sql
  sleep 10
done
4

2 に答える 2

1

current_timestamp関数とunix_timestamp関数を使用して実行する方が簡単ではないでしょうか。

DELETE FROM Table1 
 WHERE datetime < unix_timestamp(current_timestamp - interval 2 month)

シェルから実行するには、そのコマンドをファイルに入れて、 mysqlコマンドラインツールscript1.sqlを使用して実行します。

mysql db_name < script1.sql
于 2012-09-26T20:40:32.553 に答える
0
mysql --host ? -user ? -password ? {DB_NAME} < dump_script.sql > data.dat 

dump_script.sqlには、アーカイブするデータを取得するためのSELECTstatememtがあります。出力をdata.datに保存します

それから

mysql --host ? -user ? -password ? {DB_NAME} < delete_script.sql

delete_script.sqlには、dump_script.sqlと同じWHERE句を含むDELETEステートメントが含まれます。

削除スクリプトによって削除されてもダンプスクリプトに含まれないファントム挿入を回避するために、WHERE句に入る可能性のある2つのスクリプト実行の間に何も書き込まれないようにテーブルをロックしてください。

于 2012-09-26T21:18:39.620 に答える