一个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

相关内容

热门资讯

榴莲遭“仅退款”,商家花500... 极目新闻记者 王鹏2026年5月7日,河南濮阳一冷冻榴莲果肉商家反映,自己遭遇山东德州买家恶意“仅退...
4只皮皮虾1035元店主事发次... 近日,有网友反映其5月4日在三亚一家海鲜店宵夜时仅4只皮皮虾就花费1035元,价格过高,质疑店家存在...
分析师称《GTA6》发售主机或... IT之家 5 月 8 日消息,据游戏媒体 Insider Gaming 昨天报道,Circana 分...
利拓光电取得高稳定性激光器封装... 国家知识产权局信息显示,深圳市利拓光电有限公司取得一项名为“一种高稳定性激光器的封装结构”的专利,授...
别被“120W闪充”骗了:央视... 【太平洋科技快讯】央视新闻近期调查发现,市面上大量标称120W、66W的快充头存在严重功率虚标问题,...
古巴政府:美国新一轮制裁措施是... 新华社哈瓦那5月7日电 古巴外交部7日发布公告说,美国对古巴新一轮制裁措施是“经济侵略”行为,企图制...
邮轮暴发汉坦病毒疫情,世卫确认... 据凤凰卫视报道,大西洋邮轮“洪迪厄斯”号暴发汉坦病毒疫情,世界卫生组识5月7日证实,船上共有5宗确诊...
内蒙古赤峰两村半个多世纪的土地... 澎湃新闻记者 王选辉争议土地大北叉沟。本文图均为 受访者 提供备受社会关注的“赤峰两村半个多世纪的土...
冥王星5月8日开启逆行 持续约... 被“逐出”太阳系大行星序列的冥王星5月8日将结束顺行,开启为期约5个月的逆行。这也是2026年冥王星...
夸大AI功能被起诉 苹果2.5... 当地时间5月5日,因夸大AI系统“苹果智能”(Apple Intelligence)的能力,误导数百...