千家信息网

如何用python编写的简单的mysql巡检脚本

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,如何用python编写的简单的mysql巡检脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。准备工作:1 安装python 3.5,本
千家信息网最后更新 2026年11月02日如何用python编写的简单的mysql巡检脚本

如何用python编写的简单的mysql巡检脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

准备工作:
1 安装python 3.5,本次使用源码安装。
2 安装psutil模块,使用python3.5自带的easy_install包直接运行
cd /opt/python3/bin
./easy_install-3.5 psuitl安装
3 安装mysql_connector模块,同样使用easy_install安装
easy_install-3.5 mysql-connector==2.1.4

准备工作完成后便可运行如下脚本:
[mysql@jing1 scripts]$ more healthcheck.py
#!/usr/bin/env python3
# -*- coding: gbk -*-


import psutil
import mysql.connector
import argparse
import json
import datetime


def get_cpu_info(verbose):
cpu_info={}
if verbose >0:
print("[cpu] start collect cpu info ...")
data=psutil.cpu_times_percent(3)
cpu_info['user']=data[0]
cpu_info['system']=data[2]
cpu_info['idle']=data[3]
cpu_info['iowait']=data[4]
cpu_info['hardirq']=data[5]
cpu_info['softirq']=data[6]
cpu_info['cpu_cores']=psutil.cpu_count()
if verbose >0:
print("{0}".format(json.dumps(cpu_info,ensure_ascii=False,indent=4)))
print("[cpu] collection compeleted ...")
return cpu_info


def get_mem_info(verbose):
mem_info={}
if verbose >0:
print("[mem] start collect mem info ...")
data=psutil.virtual_memory()
mem_info['total']=data[0]/1024/1024/1024
mem_info['avariable']=data[1]/1024/1024/1024
if verbose>0:
print("{0}".format(json.dumps(mem_info,ensure_ascii=False,indent=4)))
print("[mem] collection compeletd ...")
return mem_info


def get_disk_info(verbose):
disk_info={}
if verbose >0:
print("[disk] start collect disk info ...")
partitions=psutil.disk_partitions()
partitions=[(partition[1],partition[2])for partition in partitions if partition[2]!='iso9660']
disk_info={}
for partition in partitions:
disk_info[partition[0]]={}
disk_info[partition[0]]['fstype']=partition[1]
for mount_point in disk_info.keys():
data=psutil.disk_usage(mount_point)
disk_info[mount_point]['total']=data[0]/1024/1024/1024
disk_info[mount_point]['used_percent']=data[3]
if verbose >0:
print("{0}".format(json.dumps(disk_info,ensure_ascii=False,indent=4)))
print("[disk] collection compeleted ....")
return disk_info


def get_mysql_info(cnx_args,status_list):
config={
'user':cnx_args.user,
'password':cnx_args.password,
'host':cnx_args.host,
'port':cnx_args.port}
cnx=None
cursor=None
mysql_info={}
try:
cnx=mysql.connector.connect(**config)
cursor=cnx.cursor(prepared=True)
for index in range(len(status_list)):
status_list[index].get_status(cursor)
status=status_list[index]
mysql_info[status.name]=status.value
mysql_info['port']=config['port']
except mysql.connector.Error as err:
print(err)
finally:
if cursor != None:
cursor.close()
if cnx != None:
cnx.close()
return mysql_info


class Status(object):
def __init__(self,name):
self.name=name
self._value=None




def get_status(self,cursor):
stmt="show global status like '{0}';".format(self.name)
cursor.execute(stmt)
value=cursor.fetchone()[1].decode('utf8')
self._value=int(value)




@property
def value(self):
if self._value==None:
raise Exception("cant get value befor execute the get_status function")
else:
return self._value


IntStatus=Status




class diskResource(object):
def __init__(self,mount_point,status):
self.mount_point=mount_point
self.status=status


def __str__(self):
result='''


{0}



range_format
{1}



total_space
{2:8.2f}G



used_space(%)
{3:8.2f}






\n'''.format(self.mount_point,self.status['fstype'],self.status['total'],self.status['used_percent']
)
return result


class diskResources(object):
def __init__(self,status):
self.disks=[]
for mount_point in status.keys():
self.disks.append(diskResource(mount_point,status[mount_point]))


def __str__(self):
result='''


disk

\n'''
for index in range(len(self.disks)):
result=result+self.disks[index].__str__()
result=result+'''

\n'''
return result


class cpuResources(object):
def __init__(self,status):
self.status=status
def __str__(self):
result='''


CPU



global



user_space(%)
{0}



kernel_space(%)
{1}



space(%)
{2}



hard_cruppt(%)
{3}



soft_cruppt(%)
{4}



io_wait(%)
{5}









\n'''.format(self.status['user'],self.status['system'],self.status['idle'],self.status['hardirq'],self.statu
s['softirq'],self.status['iowait'])
return result


class memResources(object):
def __init__(self,status):
self.status=status


def __str__(self):
result='''


MEM



global



total
{0:8.2f}G



free
{1:8.2f}G









'''.format(self.status['total'],self.status['avariable'])
return result




class mysqlResources(object):
def __init__(self,status):
self.status=status
def __str__(self):
result='''


MYSQL



{0}



innodb_log_wait
{1}



binlog_cache_use
{2}



create_temp_disk_table
{3}



Slow_querys
{4}










'''.format(self.status['port'],self.status['Innodb_log_waits'],self.status['Binlog_cache_use'],
self.status['Created_tmp_disk_tables'],self.status['Slow_queries'])


return result


class hostResources(object):
def __init__(self,cpu_info,mem_info,disk_info,mysql_info,report_title='MySQL health check'):
self.cpu=cpuResources(cpu_info)
self.mem=memResources(mem_info)
self.disk=diskResources(disk_info)
self.mysql=mysqlResources(mysql_info)
self.report_title=report_title
def __str__(self):
result='''



health_check





report_title


\n'''


result=result.replace('report_title',self.report_title)
result=result+self.cpu.__str__()
result=result+self.mem.__str__()
result=result+self.disk.__str__()
result=result+self.mysql.__str__()
result=result+'''


'''
return result




if __name__=="__main__":
parser=argparse.ArgumentParser()
parser.add_argument('--verbose',type=int,default=1,help='verbose for output')
parser.add_argument('--user',default='system',help='user name for connect to mysql')
parser.add_argument('--password',default='welcome123',help='user password for connect to mysql')
parser.add_argument('--host',default='127.0.0.1',help='mysql host ip')
parser.add_argument('--port',default=3306,type=int,help='mysql port')
parser.add_argument('--int-status',default=('Com_select,Com_insert,Com_update,Com_delete,Innodb_log_waits,'
'Binlog_cache_disk_use,Binlog_cache_use,Created_tmp_disk_tables,'
'Slow_queries')
,help='mysql status its value like int')
parser.add_argument('--report-title',default='MySQL health check',help='report title')
parser.add_argument('--output-dir',default='/tmp/',help='default report file output path')
args=parser.parse_args()
cpu_info=get_cpu_info(args.verbose)
mem_info=get_mem_info(args.verbose)
disk_info=get_disk_info(args.verbose)
status_list=[ IntStatus(name=item) for item in args.int_status.split(',')]
mysql_info=get_mysql_info(args,status_list)
#dr=diskResources(disk_info)
#cr=cpuResources(cpu_info)
#mr=memResources(mem_info)
#msr=mysqlResources(mysql_info)
hr=hostResources(cpu_info,mem_info,disk_info,mysql_info,args.report_title)
now=str(datetime.datetime.now()).replace(' ','^')
if args.output_dir.endswith('/') != True:
args.output_dir=args.output_dir+'/'
filename=args.output_dir+'mysql_inspection_{0}.html'.format(now)
with open(filename,'w') as output:
output.write(hr.__str__())
print('[report] the report been saved to {0} ok.... ....'.format(filename))

看完上述内容,你们掌握如何用python编写的简单的mysql巡检脚本的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

脚本 内容 方法 更多 模块 问题 准备 工作 运行 束手无策 为此 原因 对此 技能 源码 篇文章 经验 行业 资讯 资讯频道 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小米移动互联网科技园 互联网是第几次科技革命的成果 互联网通讯科技 互联网科技卖菜 互联网中国科技 金融科技与互联网金融 哈尔滨新华互联网科技 互联网时代科技改变生活 贵州叶脉互联网科技有限公司所属行业 互联网软件和科技 和信科技工业互联网 互联网科技扶贫时间 互联网金融科技公司的优势 宇信科技在杭州互联网排第几 广州燕处互联网科技有限公司 万物互联网智能科技 玉溪新华互联网科技怎么选 数字科技和互联网金融哪个好 北京瑞云互联网科技有限公司 互联网科技创新方面的资料 凡科互联网科技 广州互联网络科技有限公司 融贸通互联网科技 哈尔滨秒房互联网科技有限公司 互联网教育科技公司vipkid 佳云科技和互联网广告 银川新华互联网科技学校联系电话 四川慕妮娅互联网科技有限公司 有人说阿里系是互联网科技企业 昆明中奇联合互联网科技
0