刻下岁月

逝者如斯夫,不舍昼夜…
Home  /  DB • Linux • 未分类  /  shell脚本大量清除数据库数据 & 清理数据库空间碎片

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

四月 11, 2018 DB, Linux, 未分类 Leave a Comment

删除n张表数据,每张表删除部分数据,为了防止数据量大直接把mysql的临时空间沾满而导致删除失败 每次只删除5000条

#!/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'

11403total visits,1visits today

java 分析cpu飙升 内存泄露工具
Centos6离线安装Cloudera Manager 5.14.3 CDH5.14.0
原文地址:http://blog.lunhui.ren/archives/448
原创文章,转载请注明出处!

Leave a Reply

取消回复

近期文章

  • git把功能开发错了分支
  • centos6安装mysql5.6
  • linux 查看端口命令
  • Cloudera Manager CHD 切换内置数据库PostgreSQL 到 Mysql
  • nginx 启动失败 (nginx: [emerg] socket() [::]:80 failed)
  • Centos6离线安装Cloudera Manager 5.14.3 CDH5.14.0
  • shell脚本大量清除数据库数据 & 清理数据库空间碎片
  • java 分析cpu飙升 内存泄露工具

分类目录

  • DB9
  • English1
  • git2
  • Java16
  • Js4
  • Linux19
  • PHP5
  • Tools4
  • window2
  • 大数据2
  • 未分类3
  • 笑一笑1