资讯

展开

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

作者:快盘下载 人气:
#!/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;

加载全部内容

相关教程
猜你喜欢
用户评论
快盘暂不提供评论功能!