一个Shell小脚本精准统计Mysql每张表的行数实现
前言
对于开发或者运维人员来说,Mysql数据库每张表的数量肯定是要了解下,有助于我们清理无用数据或者了解哪张表比较占用空间。
另外多次统计表的行数,还能发现Mysql表的增量情况,能够预测表未来会有多大的量。
废话不多说,直接带大家写一个简单的Shell小脚本
循环获取数据库名
直接上Shell代码,showdatabases获取所有的库名。结果有一个我们不想要的,就是Database,这个grep-v掉,轻松获取所有数据库
[root@shijiangeit~]#mysql-h127.0.0.1-uxxx-pxxx-e"showdatabases;"2>/dev/null +--------------------+ |Database| +--------------------+ |information_schema| |mysql| |performance_schema| |shijiange| |test| |wordpress| +--------------------+
[root@shijiangeit~]#mysql-h127.0.0.1-uxxx-pxxx-e"showdatabases;"2>/dev/null|grep-vDatabase information_schema mysql performance_schema shijiange test wordpress
循环获取所有表
有了库信息,获取所有表就简单了,直接上Shell代码。showtables获取所有表名,其中Tables_in不需要,grep-v掉。
[root@shijiangeit~]#foronedbin$(mysql-h127.0.0.1-uxxx-pxxx-e"showdatabases;"2>/dev/null|grep-vDatabase);do >echo$onedb >mysql-h127.0.0.1-uxxx-pxxx$onedb-e"showtables"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|
循环统计每张表的行数
取出库名加表名,一个selectcount(1)统计表的行数,循环统计,直接上Shell代码。
[root@shijiangeit~]#foronedbin$(mysql-h127.0.0.1-uxxx-pxxx-e"showdatabases;"2>/dev/null|grep-vDatabase);do >foronetabin$(mysql-h127.0.0.1-uxxx-pxxx$onedb-e"showtables"2>/dev/null|grep-v'Tables_in_');do >onetablength=$(mysql-h127.0.0.1-uxxx-pxxx$onedb-e"selectcount(1)from$onetab"2>/dev/null|grep-v'count') >echo-e"$onedb.$onetab\t$onetablength" >done >done information_schema.CHARACTER_SETS40 information_schema.COLLATIONS219 information_schema.COLLATION_CHARACTER_SET_APPLICABILITY219 information_schema.COLUMNS1789 information_schema.COLUMN_PRIVILEGES0 shijiange.logincount4 shijiange.member0 shijiange.user2097153 test.detect_servers0 wordpress.wp_commentmeta0 wordpress.wp_comments0 wordpress.wp_links0 wordpress.wp_options156
变量化,脚本直接用
需要统计哪个Mysql,前面三个变量一改,立马就能统计所有表的大小了。
mysqlhost=127.0.0.1 mysqluser=xxx mysqlpassword=xxx foronedbin$(mysql-h$mysqlhost-u$mysqluser-p$mysqlpassword-e"showdatabases;"2>/dev/null|grep-vDatabase);do foronetabin$(mysql-h$mysqlhost-u$mysqluser-p$mysqlpassword$onedb-e"showtables"2>/dev/null|grep-v'Tables_in_');do onetablength=$(mysql-h$mysqlhost-u$mysqluser-p$mysqlpassword$onedb-e"selectcount(1)from$onetab"2>/dev/null|grep-v'count') echo-e"$onedb.$onetab\t$onetablength" done done
想看哪张表的行数最多?
之前的脚本加个|sort-nrk2|less搞定,超实用的小脚本就这样完成了
[root@shijiangeit~]#foronedbin$(mysql-h$mysqlhost-u$mysqluser-p$mysqlpassword-e"showdatabases;"2>/dev/null|grep-vDatabase);do >foronetabin$(mysql-h$mysqlhost-u$mysqluser-p$mysqlpassword$onedb-e"showtables"2>/dev/null|grep-v'Tables_in_');do >onetablength=$(mysql-h$mysqlhost-u$mysqluser-p$mysqlpassword$onedb-e"selectcount(1)from$onetab"2>/dev/null|grep-v'count') >echo-e"$onedb.$onetab\t$onetablength" >done >done|sort-nrk2 shijiange.user2097153 information_schema.INNODB_BUFFER_PAGE8191 performance_schema.events_waits_summary_by_thread_by_event_name5320 information_schema.INNODB_BUFFER_PAGE_LRU3453
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。