0

我有一个包含 1.2 亿行的 mysql 表,我想编写一个 shell 脚本来开始清除该表中不需要的一些无用信息。问题是我对 shell 脚本非常陌生。

我有一datetime列带有unix时间戳。我想删除不是在过去 2 个月内的每一行,因为我最近制定了一项数据保留政策,该政策只允许我保留 2 个月的某些数据。

TL;DR 需要构建一个 shell 脚本,使用列中的 unix 时间戳删除所有行,直到最后 2 个月的数据datetime

更新:这是我的新 shell 脚本

#!/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_timestampunix_timestamp函数执行会不会更容易:

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

要从 shell 运行它,您可以将该命令放在一个文件script1.sql中并使用mysql命令行工具运行它:

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 将让您的 SELECT 语句检索您要归档的数据。它将输出存储在 data.dat

然后

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

delete_script.sql 将包含与 dump_script.sql 中相同的 WHERE 子句的 DELETE 语句。

确保锁定表,以便在两个脚本执行之间没有写入可能使其进入 WHERE 子句的内容,以避免被删除脚本删除但不包含在转储脚本中的幻像插入。

于 2012-09-26T21:18:39.620 回答