vlambda博客
学习文章列表

查看mysql库表大小并排序,清表

问题

我们在环境维护的过程中,有时候数据库的表太大了,有一些无用的库表数据 可以清掉,否则会影响数据库的运行效率;

查询某个库里 各个表的大小并排序

SELECT table_schema AS '数据库', table_name AS '表名', table_rows AS '记录数', TRUNCATE (data_length / 1024 / 1024, 2) AS '数据容量(MB)', TRUNCATE (index_length / 1024 / 1024, 2) AS '索引容量(MB)'FROM information_schema.TABLESWHERE table_schema = 'XXXX这里写库名'ORDER BY table_rows DESC;

结果如下示

查询某个数据库实例里各个库的大小并排序

selecttable_schema as '数据库',sum(table_rows) as '记录数',sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'from information_schema.tablesgroup by table_schemaorder by sum(data_length) desc, sum(index_length) desc;

结果如下所示


查询出来后,就可以咨询开发,沟通是否这些 记录比较多的库表是否可以删除

一般都是直接truncate或者按条件delete

可能需要在多个环境里执行,可以写个SQL, 连接多个环境的数据库,执行SQL

/tmp/clear.sql 里写的是对各个库执行的 清库表操作

#!/bin/bashfile=/tmp/clear.sqlfor i in dev-wtf dev-a-wtf dev-b-wtfdo echo $i;    mysql -uroot -paserq -hmysql.$i.dev.local -s -N -f < $file    mysql -uroot -pqwerqwe -hmysql-us.$i.dev.local -s -N -f < $file    mysql -uroot -pqwer1w3r -hmysql-uk.$i.dev.local -s -N -f < $file    mysql -uroot -pqwerqwe -hmysql-cn.$i.dev.local -s -N -f < $file    mysql -uroot -proot -hmysql-jp.$i.dev.local -s -N -f < $file done

mysql -uroot -proot -hmysql.$i.dev.local -s -N -f < $file 这里加了 -s -N 表示在执行SQL时遇到问题,也可以继续执行,不用中断操作。

有时候我们在清库前,需要备份,可以用命令

mysqldump --column-statistics=0 -uroot -p12345 -hmysql.test-b-wtf.dev.local 库名1 $i > /Users/wtf/Downloads/b-$i-old-b.sql

这里表示 对 库1 里的表$i 进行dump 成sql,写到本地。$i这里是变量,可以提前定义

下面的脚本,对库1 里的表1 表2 表3执行dump备份操

for i in 表1 表2 表3domysqldump --column-statistics=0 -uroot -p1234qwe -hmysql.test-b-wtf.dev.local 库名1 $i > /Users/wtf/Downloads/b-$i-old-b.sqlecho $idone