찾다
데이터 베이스MySQL 튜토리얼 计算mysql数据库目录中表文件大小并排序

最近需要监控数据库每个表的增长量,其实在mysql中的information_schema.TABLES表中有记录表的大小,但是不准,要是计算每天每个表大小的话不是很准确,刚好我的

最近需要监控数据库每个表的增长量,其实在mysql中的information_schema.TABLES表中有记录表的大小,但是不准,要是计算每天每个表大小的话不是很准确,刚好我的mysql是独享表空间,,所以只要计算出数据目录中的表文件大小即可实现这个目的。以下代码实现了计算在独享表空间下,计算数据库中所有表的物理大小,并计算整个mysql数据库目录的大小和数据库目录所在分区的剩余空间。以下是代码:

#!/usr/bin/env python # -*- coding: utf-8 -*- import os,time,MySQLdb '''CREATE TABLE DBA.datasize ( `id` int(11) NOT NULL AUTO_INCREMENT, `host` varchar(20) NOT NULL COMMENT '服务器IP', `dataname` varchar(100) NOT NULL COMMENT '数据库名字', `tablename` varchar(100) NOT NULL COMMENT '表名字', `datasize` double NOT NULL COMMENT '表大小,单位:M', `uptime` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`,`host`,`dataname`,`tablename`,`datasize`,`uptime`), KEY `index_uptime` (`uptime`), KEY `index_tablename` (`tablename`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8''' #表结构 def log_w(text):#写日志 logfile = "datasize.txt" f = open(logfile,'a+') text = text+'\n' f.write(text) f.close() def log2db(size_log):#把结果写入数据库 log_host = '192.168.100.100' log_user = 'wangwei' log_pass = 'wangwei' try: conn = MySQLdb.connect(host = log_host,port = 3306,user = log_user,passwd = log_pass,charset='utf8',connect_timeout=20) cursor = conn.cursor() cursor.executemany("insert into DBA.datasize (`host`,`dataname`,`tablename`,`datasize`,`uptime`) VALUES(%s,%s,%s,%s,%s)",tuple(size_log)) conn.commit() cursor.close() conn.close() except Exception,e: print e def main(): uptime = time.strftime("%Y-%m-%d %H:%M:%S") text = "======================== %s ======================" % uptime print text #log_w(text) mysqldir = "/home/mysql/" tables = {} host = '192.168.100.10'#数据库本地IP conm = 'du -sh %s' % mysqldir datasize = os.popen(conm).readlines()[0].split('\t')[0] dir_list = os.listdir(mysqldir) for i in dir_list: dirname = os.path.join(mysqldir,i) if os.path.isdir(dirname): tb_list = os.listdir(dirname) table_list = list(set([os.path.splitext(ii)[0] for ii in tb_list])) for t_name in table_list: t_size = 0 for t in tb_list: if t_name in t: f_size = os.path.getsize(os.path.join(dirname,t)) t_size = t_size + f_size t_size = t_size/1024/1024 if t_size != 0: tables[os.path.join(i,t_name)]=t_size tables = sorted(tables.iteritems(),key = lambda asd:asd[1],reverse = True) size_log = [] for i in tables: text = str(i[0]).ljust(70)+str(i[1])+'M' aa = i[0].split("/") res = [host,aa[0],aa[1],i[1],uptime] size_log.append(res) #log_w(text) print text text = "All DataSize :".ljust(70)+str(datasize) size_log.append([host,"all","all",int(datasize.split('G')[0])*1024,uptime]) diskfree = os.popen("df -h|grep data").readlines()[0].split()[3] size_log.append([host,"disk","free",int(diskfree.split('G')[0])*1024,uptime]) #log_w(text) print text text = "Data Disk free size:".ljust(70)+diskfree #log_w(text) print text log2db(size_log) if __name__=='__main__': main()


本文出自 “王伟” 博客,请务必保留此出处

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
图文详解mysql架构原理图文详解mysql架构原理May 17, 2022 pm 05:54 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

mysql的msi与zip版本有什么区别mysql的msi与zip版本有什么区别May 16, 2022 pm 04:33 PM

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

mysql怎么去掉第一个字符mysql怎么去掉第一个字符May 19, 2022 am 10:21 AM

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

mysql怎么替换换行符mysql怎么替换换行符Apr 18, 2022 pm 03:14 PM

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql怎么将varchar转换为int类型mysql怎么将varchar转换为int类型May 12, 2022 pm 04:51 PM

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

MySQL复制技术之异步复制和半同步复制MySQL复制技术之异步复制和半同步复制Apr 25, 2022 pm 07:21 PM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

mysql怎么判断是否是数字类型mysql怎么判断是否是数字类型May 16, 2022 am 10:09 AM

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。

带你把MySQL索引吃透了带你把MySQL索引吃透了Apr 22, 2022 am 11:48 AM

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.