我需要一个shell脚本,从大型数据库中删除1000行,直到不再有行
这很简单,但我在shell脚本方面非常弱,而且许多在线教程提供了极为相似但语法上的不同细微差别
更新:
答案 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