Shell脚本遍历sql“delete”语句

时间:2010-05-14 18:59:08

标签: mysql shell

我需要一个shell脚本,从大型数据库中删除1000行,直到不再有行

这很简单,但我在shell脚本方面非常弱,而且许多在线教程提供了极为相似但语法上的不同细微差别

更新:

  • 是否可以获得一些示例代码?
  • 我需要一次删除1000行
  • 我总共需要删除1.2亿行,并且一次删除它们会锁定数据库

3 个答案:

答案 0 :(得分:1)

希望我的脚本可以帮助搜索类似问题的人

#!/bin/sh
# mysql_delta_del.sh 
# -----------------------------

db_user="root"
db_host="127.0.0.1"
db_passwd="yourpass"
db="yourdb"
db_table="mytable"
keep_records=10000000
## start id, you can change according your db
start_id=31000000

# mysql bin's path
MYSQL="$(which mysql)"


maxid=`$MYSQL -u $db_user -h $db_host -p$db_passwd $db -e 'select max(id) from $db_table'`

maxid=`echo $maxid |cut -d" " -f2`

#keep last 10 million records
delto=`echo $maxid - $keep_records  |bc`

echo "target id: $delto"


i=$start_id 
while [ $i -lt $delto ]
do
 echo "delete to $i "

 echo "DELETE FROM $db_table where id<$i LIMIT 1000 " | mysql -u $db_user -p$db_passwd -h $db_host $db
 true $(( i=i+1000 ))

done

答案 1 :(得分:1)

您也可以只使用mysql来做到这一点:


#!/bin/sh
mysql -D <database> -u <user> -p<password> -e 'DELETE FROM <table> WHERE <condition> LIMIT 10000;'

-e -接受查询作为参数

答案 2 :(得分:0)

你可以调用mysql命令行工具:

mysql -u username -p password < statements.txt

echo "your statement here" | mysql -u username -p password

在statements.txt中:

delete from `table` limit 1000;

虽然我不明白为什么你只想一次删除1k

sh的完整脚本如下所示:

#!/bin/sh
echo 'DELETE FROM `table` LIMIT 1000;' | mysql -u username -p password