文档章节

脚本一键检测数据库以及数据库表的大小

运维技术
 运维技术
发布于 2015/11/11 17:16
字数 873
阅读 1408
收藏 67
点赞 2
评论 2

上代码:

#!/bin/bash
#author: xiao白
#date: 2015-11-11
#qq: 530035210
#blog: http://my.oschina.net/pwd/blog 
#查询数据库以及数据库表的大小
  
logdir=/data/log/shell          #日志路径
log=$logdir/log.log            #日志文件 
is_font=1                #终端是否打印日志: 1打印 0不打印 
is_log=1                 #是否记录日志: 1记录 0不记录
 
datef(){
date "+%Y-%m-%d %H:%M:%S"
}
   
print_log(){
if [[ $is_log -eq 1  ]];then
[[ -d $logdir ]] || mkdir -p $logdir
echo -e "[ $(datef) ] $1" >> $log
fi
if [[ $is_font -eq 1  ]];then
echo -e "[ $(datef) ] $1"
fi
}

random=$(date "+%s")
getDbSize(){
if [[ ${#dbinfo[@]}  -eq 0  ]];then
print_log "$FUNCNAME():参数不能为空,退出函数"
return
fi

dbhost=${dbinfo[0]}
dbuser=${dbinfo[1]}
dbpasswd=${dbinfo[2]}
dbname=${dbinfo[3]}

if [[ $dbname == ""  ]];then
dbs=$(mysql -h $dbhost -u$dbuser -p"$dbpasswd"  -e 'show databases;' |grep -v Database > /tmp/dbs_$random.txt )
print_log "开始检测->数据库IP:$dbhost"
print_log "数据库名:数据库大小"
while read line
do
db_size=$(mysql -h $dbhost -u$dbuser -p"$dbpasswd"  -e "use information_schema ;select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data  from TABLES where table_schema='$line' \G;
"|grep data |awk '{print $2}')
echo "$line $db_size" >>/tmp/dbsize_$random.txt
done < /tmp/dbs_$random.txt
cat /tmp/dbsize_$random.txt|sort -n  -k 2 -r |column -t > /tmp/dbstring_$random.txt
print_log "\n`cat /tmp/dbsize_$random.txt|sort -n  -k 2 -r |column -t |sed "s/^/\\t\\t\\t/"`"
totalStr=$(cat /tmp/dbstring_$random.txt  |grep "M" |grep -v "0.00"  |awk '{print $2}' |sed "s/MB//g" |xargs |sed "s/ / + /g")
sum=$(echo "$totalStr" |bc)
print_log "[$dbhost]总数据库的大小:$sum MB"
else

db_size=$(mysql -h $dbhost -u$dbuser -p"$dbpasswd"  -e "use information_schema ;select concat(round(sum(DATA_LENGTH/1024/1024),2),'MB') as data  from TABLES where table_schema='$dbname' \G;
"|grep data |awk '{print $2}')
print_log "开始检测->数据库IP:$dbhost"
print_log "数据库名:数据库大小"
print_log "\n\t\t\t$dbname:$db_size"

fi
rm -f /tmp/dbs_$random.txt  /tmp/dbsize_$random.txt 
}

getTableSize(){

if [[ ${#dbinfo[@]}  -eq 0  ]];then
print_log "$FUNCNAME():参数不能为空,退出函数"
return
fi

dbhost=${dbinfo[0]}
dbuser=${dbinfo[1]}
dbpasswd=${dbinfo[2]}
dbname=${dbinfo[3]}

if [[ $dbname == ""  ]];then
cat /tmp/dbstring_$random.txt  |grep "M" |grep -v "0.00"  |awk '{print $1}' > /tmp/databases_$random.txt
print_log "排除空数据,开始检测以下数据的大小: `cat /tmp/databases_$random.txt |xargs`"
dbs=$(mysql -h $dbhost -u$dbuser -p"$dbpasswd"  -e 'show databases;' |grep -v Database > /tmp/dbs_$random.txt )
print_log "数据库名:数据库大小"
while read line
do
table_list=$(mysql -h $dbhost -u$dbuser -p"$dbpasswd" -e "use $line ;show tables \G ;" |grep "Tables_in" |awk '{print $2}')
db_size=$(cat /tmp/dbstring_$random.txt  |grep "M" |grep -v "0.00" |grep "^$line " |awk '{print $2}')
print_log "数据库[$line]->数据库IP:$dbhost 数据库大小:$db_size 表的数量为:`echo "$table_list"|sed "s/ /\n/g" |wc -l`个"
print_log "表名  表空间大小 表索引大小"

for i in $table_list
do
tablename="$i"
table_size=$(mysql -h $dbhost -u$dbuser -p"$dbpasswd"  -e "use information_schema;select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,  concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB   from tables where table_schema='$line'  and table_name = '$tablename' \G; " |grep "length_MB" | awk '{print $2}' |xargs  )

echo  "$tablename $table_size" >> /tmp/$random.txt
done
print_log "\n`cat /tmp/$random.txt|sort -n  -k 2 -r |column -t|sed "s/^/\\t\\t\\t/"`"
rm -f /tmp/$random.txt
done <  /tmp/databases_$random.txt
rm -f /tmp/databases_$random.txt /tmp/dbstring_$random.txt  
else
table_list=$(mysql -h $dbhost -u$dbuser -p"$dbpasswd" -e "use $dbname ;show tables \G ;" |grep "Tables_in" |awk '{print $2}')
print_log "数据库[$line]->数据库IP:$dbhost 表的数量为:`echo "$table_list"|sed "s/ /\n/g" |wc -l`个"
print_log "表名  表空间大小 表索引大小"
for i in $table_list
do
tablename="$i"
table_size=$(mysql -h $dbhost -u$dbuser -p"$dbpasswd"  -e "use information_schema;select concat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB,  concat(round(sum(index_length/1024/1024),2),'MB') as index_length_MB   from tables where table_schema='$dbname'  and table_name = '$tablename' \G; " |grep "length_MB" | awk '{print $2}' |xargs  )
echo  "$tablename $table_size" >> /tmp/$random.txt
done
print_log "\n`cat /tmp/$random.txt|sort -n  -k 2 -r |column -t |sed "s/^/\\t\\t\\t/"` "
rm -f  /tmp/$random.txt 
fi

}


dbinfo=("localhost" "root" "password" "")
getDbSize
getTableSize

   当dbinfo第4个参数为空默认检测整个数据库的数据库以及数据库表大小:

当第四个参数为具体的数据库时:

© 著作权归作者所有

共有 人打赏支持
运维技术
粉丝 95
博文 95
码字总数 101333
作品 1
广州
部门经理
加载中

评论(2)

OscerSong
OscerSong
不错,很实用
Oracle数据转移Mysql中遇到的问题以及解决办法

前几天因工作需要我得将Oracle数据库中几十张表转移到Mysql中,由于之前没有相关经验,上网简单百度后选用Navcat Premium软件工作。 Navcat Premium进行数据转移有三种办法:1、复制表 2、导...

littleant2 ⋅ 2015/07/30 ⋅ 0

Db2 数据库常见堵塞问题分析和处理

Db2 堵塞一键检查工具 Db2 数据库堵塞怎么办 作为一个数据库管理员,工作中经常会遇到的一个问题:当数据库出现故障的情况下,如何快速定位问题和找到解决方案。尤其是在运维非常重要系统的时...

孔再华 ⋅ 04/25 ⋅ 0

一起来玩AZURE SQL(三)AZURE SQL 数据库迁移

https://blog.csdn.net/capsicum29/article/details/63740187 如何将本地数据库迁移到Azure SQL,一般来说分为几部分工作, 兼容性测试:验证数据库是否与 SQL 数据库 V12 兼容。 解决兼容性...

chenhao_asd ⋅ 04/18 ⋅ 0

​风驰电掣:有效缩短SQL优化过程三步走!

作者介绍 梁敬彬,福富研究院副理事长、公司唯一四星级内训师,国内一线知名数据库专家,在数据库优化和培训领域有着丰富的经验。多次应邀担任国内外数据库大会的演讲嘉宾,在业界有着广泛的...

梁敬彬 ⋅ 2017/07/14 ⋅ 0

Python3 初学实践案例(8)使用 sqlite3 数据库存储生成的密码,prettytable 的使用

Python3 初学实践案例(8)使用 sqlite3 数据库存储生成的密码,prettytable 的使用 在前面我用 脚本实现的 版本的密码生成与管理工具中,我使用文本文件来存储我们的生成的密码。详情见:h...

FungLeo ⋅ 2017/12/20 ⋅ 0

【目录】mysql 学习

数据库排行榜 http://db-engines.com/en/ranking [MySQL运维] mysql 5.1 升级编译安装5.6把原MyISAM表转换成InnoDB,并全局备份一次【原创】 http://990487026.blog.51cto.com/10133282/169...

990487026 ⋅ 2015/09/09 ⋅ 0

架构设计分享之权限系统(看图说话)

前面一篇文章《最近架构随想》,我提到架构设计的一些构想,其实也是对之前项目经验的一些归纳及总结。今天我们就以权限系统作为切入点,谈一谈怎么设计权限系统以及怎么做到系统具有以下特性...

KnightsWarrior ⋅ 2014/08/31 ⋅ 0

zabbix优化记一次惨痛的zabbix数据库优化

最近负责公司的zabbix项目,由于前期缺少整体性能架构的规划,导致后期出一系列的问题,玩zabbix的兄弟都知道,zabbix最大的瓶颈本身不在zabbix服务,而在mysql数据库的压力上,因此,优化zab...

devilangel ⋅ 2014/06/19 ⋅ 0

数据库迁移工具--SQLAzureMW

SQLAzureMW 主要用于迁移SQL Server 数据库到Windows Azure SQL 数据库,它可以将SQL 2005及SQL 2008数据库迁移到SQL Azure上。SQLAzureMW会检测并纠正SQL Server 2005/2008与SQL Azure之间的...

匿名 ⋅ 2016/04/12 ⋅ 0

centos7.3实现基于源码编译安装LAMP的wordpress应用

WordPress应用 是一款基于PHP开发的博客发布平台。用户可以在支持PHP和MySql的系统上,轻松地搭建WordPress博客系统,并在上面发布自己的博客文章。 关于LAMP,之前的文章中已经有过很多的介...

Eumenides_s ⋅ 2017/10/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

聊聊spring cloud的RequestRateLimiterGatewayFilter

序 本文主要研究一下spring cloud的RequestRateLimiterGatewayFilter GatewayAutoConfiguration @Configuration@ConditionalOnProperty(name = "spring.cloud.gateway.enabled", matchIfMi......

go4it ⋅ 50分钟前 ⋅ 0

Spring JavaConfig 注解

JavaConfig注解允许开发者将Bean的定义和配置放在Java类中。它是除使用XML文件定义和配置Bean外的另一种方案。 配置: 如一个Bean如果在XML文件可以这样配置: <bean id="helloBean" class="...

霍淇滨 ⋅ 57分钟前 ⋅ 0

Spring clound 组件

Spring Cloud技术应用从场景上可以分为两大类:润物无声类和独挑大梁类。 润物无声,融合在每个微服务中、依赖其它组件并为其提供服务。 Ribbon,客户端负载均衡,特性有区域亲和、重试机制。...

英雄有梦没死就别停 ⋅ 59分钟前 ⋅ 0

Confluence 6 重新获得站点备份文件

Confluence 将会创建备份,同时压缩 XML 文件后存储熬你的 <home-directory>/backups> 目录中。你需要自己访问你安装的 Confluence 服务器,并且从服务器上获得这个文件。 运行从 Confluence...

honeymose ⋅ 今天 ⋅ 0

informix的常用SQL语句

1、创建数据库 eg1. 创建不记录日志的库testdb,参考语句如下: CREATE DATABASE testdb; eg2. 创建带缓冲式的记录日志的数据库testdb(SQL语句不一定在事务之中,拥有者名字不被用于对象的解...

wangxuwei ⋅ 今天 ⋅ 0

matplotlib画图

最简单的入门是从类 MATLAB API 开始,它被设计成兼容 MATLAB 绘图函数。 from pylab import *from numpy import *x = linspace(0, 5, 10)y = x ** 2figure()plot(x, y, 'r')...

Dr_hu ⋅ 今天 ⋅ 0

RabbitMQ学习以及与Spring的集成(三)

本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收。 在RabbitMQ的Spring配置文件中,首先需要增加命名空间。 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 其次是模...

onedotdot ⋅ 今天 ⋅ 0

JAVA实现仿微信红包分配规则

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教。 算法介绍 一、红包金额限制 对于微...

小致dad ⋅ 今天 ⋅ 0

Python 数电表格格式化 xlutils xlwt xlrd的使用

需要安装 xlutils xlwt xlrd 格式化前 格式化后 代码 先copy读取的表格,然后按照一定的规则修改,将昵称中的学号提取出来替换昵称即可 from xlrd import open_workbookfrom xlutils.copy ...

阿豪boy ⋅ 今天 ⋅ 0

面试题:使用rand5()生成rand7()

前言 读研究生这3 年,思维与本科相比变化挺大的,这几年除了看论文、设计方案,更重要的是学会注重先思考、再实现,感觉更加成熟吧,不再像个小P孩,人年轻时总会心高气傲。有1 道面试题:给...

初雪之音 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部