計算mysql資料庫目錄中表檔案大小並排序

2021-09-04 23:45:00 字數 3116 閱讀 1316

最近需要監控資料庫每個表的增長量,其實在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]

#log_w(text)

print text

text = "all datasize :".ljust(70)+str(datasize)

diskfree = os.popen("df -h|grep data").readlines()[0].split()[3]

#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()

查詢MySQL資料庫中表結構

什麼是表結構?表結構就是定義資料表檔名,確定資料表包含哪些字段,各字段的欄位名 字段型別 及寬度,並將這些資料輸入到計算機當中。查詢方法 以表 employees 為例子 1.describe desc 表名 desc 是 describe的縮寫 describe用於檢視特定表的詳細設計資訊 des...

mysql資料庫中表和資料的基本操作

資料庫的結構為 資料庫 表 資料 資料庫建立完成後不能直接新增資料,需先建表,在表裡寫資料 表的建立 create table if not exists 表名 字段列表,約束或索引列表 字段列表,約束或索引列表 索引約束 表選項列表 刪除 drop table if exists 表名 修改表 a...

MySQL資料庫中表的備份與還原

對資料庫jxgl中的某乙個表進行備份與恢復 use jxgl 鎖定資料表 lock tables student read 匯出資料到對應資料夾下 select into outfile c programdata mysql mysql server 5.7 uploads student.bak...