查看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.TABLES
WHERE
table_schema = 'XXXX这里写库名'
ORDER BY
table_rows DESC;
结果如下示
查询某个数据库实例里各个库的大小并排序
select
table_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.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;
结果如下所示
查询出来后,就可以咨询开发,沟通是否这些 记录比较多的库表是否可以删除
一般都是直接truncate或者按条件delete
可能需要在多个环境里执行,可以写个SQL, 连接多个环境的数据库,执行SQL
/tmp/clear.sql 里写的是对各个库执行的 清库表操作
file=/tmp/clear.sql
for i in dev-wtf dev-a-wtf dev-b-wtf
do
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 表3
do
mysqldump --column-statistics=0 -uroot -p1234qwe -hmysql.test-b-wtf.dev.local 库名1 $i > /Users/wtf/Downloads/b-$i-old-b.sql
echo $i
done