返回顶部
首页 > 资讯 > 数据库 >如何用python编写的简单的mysql巡检脚本
  • 406
分享到

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

2024-04-02 19:04:59 406人浏览 安东尼
摘要

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

如何用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='''                <div class="stage-list">
                    <div class="stage-title"><span>{0}</span></div>
                    <div class="detail">
                        <p class="detail-list">
                            <span class="detail-title">range_format</span>
                            <span class="detail-describe">{1}</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">total_space</span>
                            <span class="detail-describe">{2:8.2f}G</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">used_space(%)</span>
                            <span class="detail-describe">{3:8.2f}</span>
                        </p>
                        <p class="detail-list">
                            
                        </p>
                    </div>
                </div>\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='''        <div class="list-item">
            <div class="cateGory">
                <span>disk</span>
            </div>
            <div class="second-stage">\n'''
        for index in range(len(self.disks)):
            result=result+self.disks[index].__str__()
        result=result+'''            </div>
        </div>\n'''
        return result


class cpuResources(object):
    def __init__(self,status):
        self.status=status
    def __str__(self):
        result='''        <div class="list-item">
            <div class="category">
                <span>CPU</span>
            </div>
            <div class="second-stage">
                <div class="stage-list">
                    <div class="stage-title"><span>global</span></div>
                    <div class="detail">
                        <p class="detail-list">
                            <span class="detail-title">user_space(%)</span>
                            <span class="detail-describe">{0}</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">kernel_space(%)</span>
                            <span class="detail-describe">{1}</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">space(%)</span>
                            <span class="detail-describe">{2}</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">hard_cruppt(%)</span>
                            <span class="detail-describe">{3}</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">soft_cruppt(%)</span>
                            <span class="detail-describe">{4}</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">io_wait(%)</span>
                            <span class="detail-describe">{5}</span>
                        </p>
                        <p class="detail-list">


                        </p>
                    </div>
                </div>
            </div>
        </div>\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='''        <div class="list-item">
            <div class="category">
                <span>MEM</span>
            </div>
            <div class="second-stage">
                <div class="stage-list">
                    <div class="stage-title"><span>global</span></div>
                    <div class="detail">
                        <p class="detail-list">
                            <span class="detail-title">total</span>
                            <span class="detail-describe">{0:8.2f}G</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">free</span>
                            <span class="detail-describe">{1:8.2f}G</span>
                        </p>
                        
                        <p class="detail-list">
                            
                        </p>
                    </div>
                </div>
            </div>
        </div>'''.format(self.status['total'],self.status['avariable'])
        return result




class mysqlResources(object):
    def __init__(self,status):
        self.status=status
    def __str__(self):
        result='''        <div class="list-item">
            <div class="category">
                <span>MYSQL</span>
            </div>
            <div class="second-stage">
                <div class="stage-list">
                    <div class="stage-title"><span>{0}</span></div>
                    <div class="detail">
                        <p class="detail-list">
                            <span class="detail-title">innodb_log_wait</span>
                            <span class="detail-describe">{1}</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">binlog_cache_use</span>
                            <span class="detail-describe">{2}</span>
                        </p>
                        <p class="detail-list">
                            <span class="detail-title">create_temp_disk_table</span>
                            <span class="detail-describe">{3}</span>
                        </p>
                                                <p class="detail-list">
                                                        <span class="detail-title">Slow_querys</span>
                                                        <span class="detail-describe">{4}</span>
                                                </p>


                        <p class="detail-list">
                            
                        </p>
                    </div>
                </div>
            </div>
        </div>'''.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='''<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>health_check</title>
<style>
*{
    margin: 0;
    padding: 0;
}
    .content{
        width:1000px;
        height: auto;
        margin: 30px auto;
        border-bottom:1px solid #b2b2b2;
    }
    .list-item{
        border:1px solid #b2b2b2;
        border-bottom: none;
        transition: all .35s;
        overflow: hidden;
        display: flex;
    }
    .list-item:empty{
        display: none;
    }
    .top-title{
        line-height: 32px;
        font-size: 16px;
        color: #333;
        text-indent: 10px;
        font-weight: 600;
    }
    .category{
        width:97px;
        height: auto;
        border-right: 1px solid #b2b2b2;
        float: left;
        text-align: center;
        position: relative;
    }
    .stage-title>span,
    .category>span{
        display: block;
        height: 20px;
        width:100%;
        text-align: center;
        line-height: 20px;
        position: absolute;
        top: 50%;
        margin-top: -10px;left: 0;
    }
    .second-stage{
        width:900px;
        float: left;
    }
    .stage-list{
        border-bottom: 1px solid #b2b2b2;
        display: flex;
    }
    .stage-list:last-child{
        border-bottom: 0;
    }
    .stage-title{
        width:99px;
        border-right: 1px solid #b2b2b2;
        position: relative;
    }
    .detail{
        flex: 1;
    }
    .detail-list{
        border-bottom: 1px solid #b2b2b2;
        height: 40px;
        display: flex;
        transition: all .35s;
    }
    .detail-title{
        padding: 10px;
        height: 20px;
        line-height: 20px;
        border-right: 1px solid #b2b2b2;
        width:200px;
    }
    .detail-describe{
        flex: 1;
        padding: 10px;line-height: 20px;
    }
    .detail-list:last-child{
        border-bottom: 0;
    }
    .list-item:hover{
        background-color: #eee;
    }
    .detail-list:hover{
        background-color: #d1d1d1;
    }
</style>
</head>
<body>
    <div class="content">
                <div class="list-item">
                        <p class="top-title">report_title</p>
                </div>\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+'''    </div>
</body>
</html>'''
        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巡检脚本的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网数据库频道,感谢各位的阅读!

您可能感兴趣的文档:

--结束END--

本文标题: 如何用python编写的简单的mysql巡检脚本

本文链接: https://lsjlt.com/news/61639.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何用python编写的简单的mysql巡检脚本
    如何用python编写的简单的mysql巡检脚本,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 准备工作:1&n...
    99+
    2024-04-02
  • MySQL数据库巡检脚本怎么编写
    MySQL数据库巡检脚本怎么编写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概述分享一个我平时用来做MySQLl数据库巡检的脚本,该脚本主要...
    99+
    2024-04-02
  • python巡检脚本的项目实践
    目录方法一、使用os模块的system方法方法二、使用os.popen()方法三、使用commands模块,有三个方法可以使用方法四、subprocess模块方法一、使用os模块的s...
    99+
    2023-05-17
    python 巡检脚本 python 巡检
  • Python编写简单的HTML页面合并脚本
    最近写一个BootStrap页面...因为功能需要所以决定一个页面解决所有问题,然后用jQuery来动态显示功能....然而这样做的话页面会相当庞大,一堆隐藏模态窗口和功能div都堆在一起看起来挺难受的 ...
    99+
    2022-06-04
    脚本 页面 简单
  • 根据公司需求写的一个linux 巡检小脚本
    核心代码: #!/bin/bash check_process(){ tolprocess=`ps auxf|grep DisplayMa[nager]|wc -l` #if [ "$tolproc...
    99+
    2022-06-04
    脚本 需求 公司
  • Python+Flask编写一个简单的行人检测API
    目录前提条件实验环境项目结构主要代码运行结果前提条件 1.了解Python语言,并会安装第三方库 2.了解Python Web Flask框架 3.了解PyTorch深度学习框架 实...
    99+
    2024-04-02
  • 使用Python读写文本文件及编写简单的文本编辑器
    学习raw_input和argv是学习读取文件的前提,你可能不能完全理解这个练习,所以认真学习并检查。如果不认真的话,很容易删除一些有用的文件。 这个练习包含两个文件,一个是运行文件ex15.py,一个是e...
    99+
    2022-06-04
    编辑器 文本文件 文本
  • 用Python写游戏脚本原来这么简单
    前言最近在玩儿公主连结,之前也玩儿过阴阳师这样的游戏,这样的游戏都会有个初始号这样的东西,或者说是可以肝的东西。当然,作为一名程序员,肝这种东西完全可以用写代码的方式帮我们自动完成。游戏脚本其实并不高深,最简单的体验方法就是下载一个Airt...
    99+
    2023-05-14
    游戏 Python 脚本
  • 如何编写SQLMap的Tamper脚本
    本篇内容介绍了“如何编写SQLMap的Tamper脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!测试环境最新版某狗测试方法安全狗其实是比...
    99+
    2023-07-05
  • 分享一个简单的python读写文件脚本
    先来看一段创建文件并写入文本的代码,然后作介绍。 #!/usr/bin/env python 'makeFile.py -- create a file' import ...
    99+
    2022-06-04
    脚本 简单 文件
  • python简单的监控脚本-利用sock
    python简单的监控脚本-利用socket、psutil阻止远程主机运行特定程序 psutil是一个跨平台的库(http://code.google.com/p/psutil/),能够轻松的实现获取系统运行的进程和系统利用率(CPU、内...
    99+
    2023-01-30
    脚本 简单 python
  • 用Python编写简单的微博爬虫
    先说点题外话,我一开始想使用Sina Weibo API来获取微博内容,但后来发现新浪微博的API限制实在太多,大家感受一下: 只能获取当前授权的用户(就是自己),而且只能返回最新的5条,WTF! 所以...
    99+
    2022-06-04
    爬虫 简单 Python
  • 用Python编写一个简单的Http S
    原文地址:Write a simple HTTP server in Python http://www.acmesystems.it/python_httpd 例子中源码: https://github.com/tanzi...
    99+
    2023-01-31
    简单 Python Http
  • Python抢购脚本的编写方法
    想买mate40,但总是抢不到,所以想试着能不能写个脚本代码。 第一步:把想要抢购的商品加进购物车,注意:脚本是对购物车内全部商品进行下单操作,所以不够买的商品最好先从购物车内删除。...
    99+
    2024-04-02
  • 怎么用Python编写简单的gRPC服务
    这篇文章主要介绍了怎么用Python编写简单的gRPC服务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。它可以...
    99+
    2023-06-20
  • MySQL如何实现密码加密认证的简单脚本
    小编给大家分享一下MySQL如何实现密码加密认证的简单脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! MySQL登录的...
    99+
    2024-04-02
  • 简单的python脚本之99乘法表
    九九乘法表小学都学过,那么如何用python编写一个九九乘法表的脚本呢?创建一个table9x9.py文件,代码如下#!/usr/bin/env python # coding: utf-8 __author_...
    99+
    2023-01-30
    脚本 简单 乘法表
  • 简单易用的Python Linux脚本操作指南
    简单易用的Python Linux脚本操作指南在Linux环境下,Python脚本是一种异常强大且易于使用的工具。Python的简洁语法和丰富的库使得编写脚本变得快捷和高效。本文将为您介绍一些简单易用的Python Linux脚本操作,并提...
    99+
    2023-10-22
    Python Linux 脚本操作
  • 如何用python写一个简单的find命
        对一个运维来说可能会经常去查找目录下的一些文件是否存在,最常用的就是find命令,它不仅可以查找文件也可以查找目录,find命令用法查找文件[root@node1 opt]# find /usr/ -type f -name df/...
    99+
    2023-01-31
    如何用 简单 python
  • 如何使用Python写一个简单的JSONParser
    本篇内容主要讲解“如何使用Python写一个简单的JSONParser”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Python写一个简单的JSONParser”吧!JSON Token...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作