当你有个大数据表在库里, 你的库早晚会爆掉, 备份不易, 查找困难, 任何操作都举步维艰, 唯有一招: 删. 但是删也是如些之困难, 会锁库很长时间, 你的客户暴跳如雷, 你的老板头上冒烟. 这时候你咋办, 还能咋办, 只有慢慢删. 可你这个人有这么懒, 网上搜来找去, 看我这个脚本, 节约你的大量时间, 让你渡过又一个美好的一天. 闲言少叙, 书归正传.
#!/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