前言
對于開發或者運維人員來說,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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- 監控MySQL主從狀態的shell腳本
- shell腳本一鍵安裝MySQL5.7.29的方法
- mysql常用備份命令和shell備份腳本分享
- shell腳本定時備份MySQL數據庫數據并保留指定時間
- shell腳本自動化創建虛擬機的基本配置之tomcat--mysql--jdk--maven
- shell腳本實現mysql定時備份、刪除、恢復功能
- 通過Shell腳本批量創建服務器上的MySQL數據庫賬號
- 使用shell腳本來給mysql加索引的方法
- 干掉一堆mysql數據庫,僅需這樣一個shell腳本(推薦)
- 使用shell腳本每天對MySQL多個數據庫自動備份的講解
- MySQL Shell的介紹以及安裝