查看mysql库表大小并排序,清表
问题
我们在环境维护的过程中,有时候数据库的表太大了,有一些无用的库表数据 可以清掉,否则会影响数据库的运行效率;
查询某个库里 各个表的大小并排序
SELECTtable_schema AS '数据库',table_name AS '表名',table_rows AS '记录数',TRUNCATE (data_length / 1024 / 1024, 2) AS '数据容量(MB)',TRUNCATE (index_length / 1024 / 1024, 2) AS '索引容量(MB)'FROMinformation_schema.TABLESWHEREtable_schema = 'XXXX这里写库名'ORDER BYtable_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 里写的是对各个库执行的 清库表操作
file=/tmp/clear.sqlfor i in dev-wtf dev-a-wtf dev-b-wtfdoecho $i;mysql -uroot -paserq -hmysql.$i.dev.local -s -N -f < $filemysql -uroot -pqwerqwe -hmysql-us.$i.dev.local -s -N -f < $filemysql -uroot -pqwer1w3r -hmysql-uk.$i.dev.local -s -N -f < $filemysql -uroot -pqwerqwe -hmysql-cn.$i.dev.local -s -N -f < $file mysql -uroot -proot -hmysql-jp.$i.dev.local -s -N -f < $filedone
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
