欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

shell 获取 mysql 行数_一个Shell小脚本精准统计Mysql每张表的行数实现

发布时间:2024/9/19 数据库 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 shell 获取 mysql 行数_一个Shell小脚本精准统计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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持免费资源网。

总结

以上是生活随笔为你收集整理的shell 获取 mysql 行数_一个Shell小脚本精准统计Mysql每张表的行数实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。