Shell脚本大量清除数据库数据 & 清理数据库空间碎片

该博客介绍了一个shell脚本,用于分批删除MySQL表数据并进行碎片清理。脚本读取tbl.txt文件,根据指定条件删除数据,每次删除5000条,并在删除后使用ALTER TABLE或OPTIMIZE TABLE命令释放空间。通过监控表空间的大小来评估清理效果。
摘要由CSDN通过智能技术生成
#!/bin/sh
dsize=5000
pwd=xxx
hst=xxx
dbname=xxx
dport=xxx
user=xxx
for line in `cat ./tbl.txt`
do
IFS=',' arr=($line)
j=$((${arr[2]}/dsize + 1))
SQL="delete from ${arr[0]} where ${arr[1]} <= ${arr[2]} limit $dsize;"
echo $SQL
echo $j
i=0;
while [ $i -le $j ];
do
echo "del table---${arr[0]} size---$dsize times---$i"
i=$((i + 1))
QUERY=`mysql -h$hst  -u$user -p$pwd -P$dport $dbname  << EOF
$SQL
exit
EOF`
done
done

tbl.txt

每一行第一个字段是表名,第二个字段是主键或其他,执行时要指定的where条件字段名字,第三个字段是where条件小于的值

比如第二行在shell运行后会被组装成sql

delete from user where id < 247058 limit 5000

table_name1,premarykeyname1,7382
user,id,247508

删除数据后使用如下命令释放mysql碎片空间

innodb引擎

alter table xxx engine = innodb;

其他的可以使用

optimize table xxx1,xxx2

可以再执行前后用如下sql查看表空间的释放情况单位M

SELECT 
DATA_LENGTH/1024/1024 + DATA_FREE/1024/1024 + INDEX_LENGTH/1024/1024 AS totl,
DATA_LENGTH/1024/1024 , DATA_FREE/1024/1024 , INDEX_LENGTH/1024/1024 
FROM TABLES WHERE table_name='xxx'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值