一个Shell小脚本精准统计Mysql每张表的行数
admin
2023-03-02 08:02:00
0

前言

对于开发或者运维人员来说,Mysql数据库每张表的数量肯定是要了解下,有助于我们清理无用数据或者了解哪张表比较占用空间。
另外多次统计表的行数,还能发现Mysql表的增量情况,能够预测表未来会有多大的量。
废话不多说,直接带大家写一个简单的Shell小脚本

循环获取数据库名

直接上Shell代码,show databases获取所有的库名。结果有一个我们不想要的,就是Database,这个grep -v掉,轻松获取所有数据库

[root@shijiangeit ~]# mysql -h 127.0.0.1 -uxxx -pxxx -e "show databases;" 2>/dev/null
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| shijiange          |
| test               |
| wordpress          |
+--------------------+
[root@shijiangeit ~]# mysql -h 127.0.0.1 -uxxx -pxxx -e "show databases;" 2>/dev/null |grep -v Database
information_schema
mysql
performance_schema
shijiange
test
wordpress

循环获取所有表

有了库信息,获取所有表就简单了,直接上Shell代码。show tables获取所有表名,其中Tables_in不需要,grep -v掉。

[root@shijiangeit ~]# for onedb in $(mysql -h 127.0.0.1 -uxxx -pxxx -e "show databases;" 2>/dev/null |grep -v Database);do
>   echo $onedb
>   mysql -h 127.0.0.1 -uxxx -pxxx $onedb -e "show tables" 2>/dev/null
> done
information_schema
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMN_PRIVILEGES                     |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| GLOBAL_STATUS                         |
| GLOBAL_VARIABLES                      |
| KEY_COLUMN_USAGE                      |

循环统计每张表的行数

取出库名加表名,一个select count(1)统计表的行数,循环统计,直接上Shell代码。

[root@shijiangeit ~]# for onedb in $(mysql -h 127.0.0.1 -uxxx -pxxx -e "show databases;" 2>/dev/null |grep -v Database);do
>   for onetab in $(mysql -h 127.0.0.1 -uxxx -pxxx $onedb -e "show tables" 2>/dev/null |grep -v 'Tables_in_');do
>     onetablength=$(mysql -h 127.0.0.1 -uxxx -pxxx $onedb -e "select count(1) from $onetab" 2>/dev/null |grep -v 'count')
>     echo -e "$onedb.$onetab\t$onetablength"
>   done
> done
information_schema.CHARACTER_SETS   40
information_schema.COLLATIONS   219
information_schema.COLLATION_CHARACTER_SET_APPLICABILITY    219
information_schema.COLUMNS  1789
information_schema.COLUMN_PRIVILEGES    0
shijiange.logincount    4
shijiange.member    0
shijiange.user  2097153
test.detect_servers 0
wordpress.wp_commentmeta    0
wordpress.wp_comments   0
wordpress.wp_links  0
wordpress.wp_options    156

变量化,脚本直接用

需要统计哪个Mysql,前面三个变量一改,立马就能统计所有表的大小了。

mysqlhost=127.0.0.1
mysqluser=xxx
mysqlpassword=xxx

for onedb in $(mysql -h $mysqlhost -u$mysqluser -p$mysqlpassword -e "show databases;" 2>/dev/null |grep -v Database);do
  for onetab in $(mysql -h $mysqlhost -u$mysqluser -p$mysqlpassword $onedb -e "show tables" 2>/dev/null |grep -v 'Tables_in_');do
    onetablength=$(mysql -h $mysqlhost -u$mysqluser -p$mysqlpassword $onedb -e "select count(1) from $onetab" 2>/dev/null |grep -v 'count')
    echo -e "$onedb.$onetab\t$onetablength"
  done
done

想看哪张表的行数最多?

之前的脚本加个 |sort -nrk 2|less 搞定,超实用的小脚本就这样完成了

[root@shijiangeit ~]# for onedb in $(mysql -h $mysqlhost -u$mysqluser -p$mysqlpassword -e "show databases;" 2>/dev/null |grep -v Database);do
>   for onetab in $(mysql -h $mysqlhost -u$mysqluser -p$mysqlpassword $onedb -e "show tables" 2>/dev/null |grep -v 'Tables_in_');do
>     onetablength=$(mysql -h $mysqlhost -u$mysqluser -p$mysqlpassword $onedb -e "select count(1) from $onetab" 2>/dev/null |grep -v 'count')
>     echo -e "$onedb.$onetab\t$onetablength"
>   done
> done | sort -nrk 2
shijiange.user  2097153
information_schema.INNODB_BUFFER_PAGE   8191
performance_schema.events_waits_summary_by_thread_by_event_name 5320
information_schema.INNODB_BUFFER_PAGE_LRU   3453

相关内容

热门资讯

【今日要闻】“掌中乐游戏中心.... 家人们!今天小编来为大家解答掌中乐游戏中心透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪...
终于了解“山西扣点.是不是有挂... 有 亲,根据资深记者爆料山西扣点是可以开挂的,确实有挂(咨询软件无需打开...
重磅消息“福建大菠萝.可以开挂... 网上科普关于“福建大菠萝有没有挂”话题很是火热,小编也是针对福建大菠萝作*弊开挂的方法以及开挂对应的...
重磅消息“闽游麻将拼多多.有挂... 您好:闽游麻将拼多多这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这...
终于懂了“福星游戏.究竟有挂吗... 家人们!今天小编来为大家解答福星游戏透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买很...
玩家攻略科普“乐游510k.辅... 有 亲,根据资深记者爆料乐游510k是可以开挂的,确实有挂(咨询软件无需...
今日重大消息“宝马娱乐.有没有... 今日重大消息“宝马娱乐.有没有挂?”详细开挂教程您好,宝马娱乐这个游戏其实有挂的,确实是有挂的,需要...
我来教教您“情怀娱乐.有没有挂... 您好:情怀娱乐这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款游戏...
重磅消息“天天福建麻将.究竟有... 有 亲,根据资深记者爆料天天福建麻将是可以开挂的,确实有挂(咨询软件无需...
特朗普:美国还将增加航空母舰数... 当地时间22日,美国总统特朗普在佛罗里达州海湖庄园与国防部长(战争部长)赫格塞思举行新闻发布会,宣布...