一个Shell小脚本精准统计Mysql每张表的行数实现
程序员文章站
2023-10-30 18:20:10
前言
对于开发或者运维人员来说,mysql数据库每张表的数量肯定是要了解下,有助于我们清理无用数据或者了解哪张表比较占用空间。
另外多次统计表的行数,还能发现mysql表的...
前言
对于开发或者运维人员来说,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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。