`
zhengdl126
  • 浏览: 2540009 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

python监控单台多实例数据库服务器的数据库端口

 
阅读更多

http://wangwei007.blog.51cto.com/68019/1118809

 

 

    最近公司做数据库的单台服务器多实例,需要对各个数据库的进程进行监控,因为我们的资产数据库中已经有这个服务器跑多少个实例,端口是什么,用来做什么的,所以就拿资产数据库的端口和服务器本地运行的数据库端口进行对比,报出没有运行的mysql实例以及他的用途。一种方法是根据"ps auxww|grep mysqld|grep -v root|grep -v grep"这个命令抓取本地运行的数据库端口,不过你也可以根据netstat命令来获取本地数据库实例的所有端口;还有一种方法就是从资产中得到这个服务器应该运行的所有mysql端口,用python的socket模块来检测端口是否存活,这种方法比较简单一些。我用第一种方法是因为我的这段代码我已经写过用于其他用途,等于复用,图个省事。以下是代码内容:

    #!/bin/env python
    # -*- coding: utf-8 -*-
    
    import os,sys,MySQLdb
    
    def center(sql):#连接数据库
        try:
            center_ip = '192.168.1.100'
            center_user = 'root'
            center_passwd = 'xxxxxx'
            conn = MySQLdb.connect(host = center_ip,user = center_user,passwd = center_passwd,charset='utf8',connect_timeout=20)
            cursor = conn.cursor() 
            cursor.execute(sql)
            alldata = cursor.fetchall()
            cursor.close()
            conn.close()
            return alldata
        except:
            return 0
    
    class check_port():#走资产中获取本地IP中应该有多少个mysql实例端口
    
        def __init__(self):
            conn = "ip a|grep glob|grep -v '192.168'|awk '{print $2}'"
            self.host = os.popen(conn).readlines()[0].split("/")[0]
    
        def remot(self):
            sql = "SELECT PORT FROM center.host_info WHERE flag='1' AND del_info!=0 AND ip='%s' AND host_name IN ('a','b','c')" % self.host
            alldata = center(sql)
            cent_port = []
            if alldata != 0:
                for i in alldata:
                    cent_port.append(str(i[0]))
                return cent_port
            else:
                return cent_port
    
        def local(self):#获取本地mysql有多少个实例运行
            psinfo = os.popen("ps auxww|grep mysqld|grep -v root|grep -v grep").readlines()
            local_port = []
            if not psinfo:
                return local_port
            for i in psinfo:
                for j in i.split("--"):
                    if j.find("port") != -1:
                        port = j.split("=")[1].strip()
                        local_port.append(port)
            return local_port
    
        def main(self):
            local_port = self.local()
            cent_port = self.remot()
                    cent_port.sort()
                    local_port.sort()
            if local_port == cent_port and len(local_port) != 0 and len(cent_port) != 0:
                print 0
            else:
                error = ""
                diff_list = list(set(local_port) ^ set(cent_port))
                for port in diff_list:
                    sql = "SELECT CONCAT(a.main_name,'_',b.sub_name,'_',c.app_name,'_',c.port) AS used FROM center_app.main_category a, center_app.sub_category b, center_app.app_info c WHERE a.id = b.main_id AND b.dist_id = c.dist_id AND b.main_id = c.main_id AND b.main_id='2' AND c.flag='1' AND c.del_info!=0 AND c.ip='%s' and c.port='%s'" % (self.host,port)
                    alldata = center(sql)
                    if error == "":
                        error = error + alldata[0][0]
                    else:
                        error = error + ";" + alldata[0][0]
                print error
    
    if __name__ == "__main__":
        boss = check_port()
        boss.main()

 如果用第二种方法的话,很简单,用下面的函数可以实现这个端口测试:

    ipmort socket
    
    def test_port()
        s = socket.socket()
        address = '127.0.0.1'
        port = 80
        try:
            s.connect((address,port))
            s.close()
            return True
        except Exception,e:
            return False

 

分享到:
评论

相关推荐

    一个网站可以连接多台服务器

    综上所述,一个网站连接多台服务器涉及到的设计与技术包括:工厂模式用于动态创建服务器对象,反射用于动态地识别和实例化服务器,负载均衡器实现请求的分发,数据同步策略保证数据一致性,以及监控和日志系统辅助...

    Python-mtop用于MongoDB类似于top工具

    Python-mtop是一款针对MongoDB数据库的实时监控工具,类似于Linux系统的"top"命令,提供了一种直观且交互的方式来查看MongoDB服务器的状态和性能指标。这款工具由Python编写,旨在帮助DBA(数据库管理员)和开发者更...

    如何访问局域网内的sql sever数据库.rar_SQL sever_局域网 数据库_局域网数据库_数据库

    安装过程中,你需要为SQL Server创建一个或多个实例,每个实例可以对应一个或多个数据库。 其次,了解SQL Server的身份验证模式。默认情况下,SQL Server使用Windows身份验证,这意味着用户必须拥有有效的域账户...

    Python-nagiospluginmongodb检查MongoDB状态的Nagios插件

    1. **连接检查**:验证Nagios服务器是否能成功连接到MongoDB实例,这涉及到网络连通性、MongoDB服务是否在运行、端口是否开放等。 2. **性能指标**:收集和分析MongoDB的性能数据,如每秒操作数(ops/s)、查询响应...

    Python-PortDogPortDog是利用端口检测技术的网络异常检测工具完全Python制造

    Python-PortDog是一款基于端口检测技术的网络异常检测工具,完全使用Python编程语言编写,旨在提供高效且用户友好的网络监控解决方案。Python作为一种高级、解释型、交互性和面向对象的脚本语言,因其简洁的语法和...

    获取局域网SQL Server实例信息

    默认情况下,SQL Server安装一个名为"MSSQLSERVER"的默认实例,但用户也可以选择创建命名实例,以便在同一台服务器上运行多个SQL Server环境。 获取局域网中SQL Server实例信息的方法多种多样,其中一种常见的是...

    Python-redispyRedis的Python客户端

    这里的`host`、`port`和`db`参数分别代表Redis服务器的主机名、端口和数据库编号。 **2. 数据类型操作** `redis-py`支持Redis的所有基本数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和...

    nacos2.1.0版本-达梦数据库-linux

    - URL:jdbc:dm://数据库服务器IP:端口/数据库名 - 驱动类名:com.dameng.jdbc.DmDriver - 用户名:达梦数据库用户名 - 密码:达梦数据库密码 5. **配置管理与服务发现** - 在Nacos中创建配置,可以指定服务名...

    Python-mongoctl管理MongoDB服务器和副本设置使用JSON配置

    Python-mongoctl是一个Python库,它提供了命令行接口(CLI)来启动、停止、监控MongoDB服务器和副本集。它的核心功能包括: 1. **启动和停止MongoDB实例**:mongoctl可以方便地启动单个MongoDB实例或整个配置文件中...

    全国疫情数据监控项目,基于python3.7、flask框架,部署基于gunicorn.zip

    全国疫情数据监控项目是一个利用Python 3.7和Flask微服务框架开发的应用,旨在实时收集、处理并展示全国各地的疫情数据。这个项目的核心在于利用Python的高效数据处理能力和Flask的轻量级Web服务特性,构建一个可以...

    数据库自动化运维方案.docx

    通过上述标准和规范,有赞DBA团队花费约两个月时间完成了所有不符合标准的主机和实例的改造,并使用saltstack工具维护数据库服务器的基础软件安装和文件配置规范。 ##### 2.2 技术栈 ZanDB系统采用Python Django...

    python 监测内存和cpu的使用率实例

    总结来说,这个Python实例提供了一种有效的方法来远程监控Linux服务器的CPU和内存使用率,并将数据存储在数据库中。这在系统监控、性能优化或者问题排查时非常有用。需要注意的是,实际应用时应根据实际需求调整监控...

    Python库 | prometheus_client_model-0.0.1-py2.7.egg

    Python库`prometheus_client_model-0.0.1-py2.7.egg`是针对Prometheus监控系统的客户端模型库,主要用于Python开发环境。Prometheus是一款强大的开源监控和警报工具,广泛应用于微服务架构和容器化环境。该库允许...

    pythonkaifa160console.zip 搭建一个pyc的act服务器

    总的来说,"pythonkaifa160console.zip"提供的内容是一个完整的ACT服务器开发和部署流程的实例,涵盖了Python Web开发的多个核心知识点。通过学习和实践这个项目,开发者可以深入理解如何利用Python构建和管理高效、...

    Python库 | portend-2.1.1-py2.py3-none-any.whl

    - **应用部署**:在多实例部署时,确保每个实例使用的端口互不冲突。 总结来说,Portend是一个实用的Python工具库,它为开发者提供了一种便捷的方式,用于在程序运行前检查网络端口的可用性,从而提高程序的稳定性...

    Python库 | python_logging_rabbitmq-1.1.1-py2.py3-none-any.whl

    2. 设置RabbitMQ服务器连接:在Python代码中,创建一个`RabbitMQHandler`实例,指定RabbitMQ服务器的地址、端口、用户名和密码。 3. 配置日志记录器:将`RabbitMQHandler`添加到Python的日志记录器中,并设置合适的...

    pythonProject5:服务器

    本项目"pythonProject5:服务器"很可能是一个使用Python编写的服务器端应用实例,旨在帮助开发者学习和实践相关技能。下面将详细探讨Python在服务器开发中的应用以及可能涉及的知识点。 1. **Web服务器框架**:...

    Python-aiosmtpdasyncio基于asyncio对标准库smtpdpy的替代

    `SMTP`实例的`start`方法启动了服务器,监听本地的1025端口。 通过深入学习`aiosmtpd`的源代码和文档,你可以进一步了解如何自定义服务器的行为,如存储邮件到文件系统、数据库或者云服务,以及如何实现更复杂的...

    Python-用于帮助识别开放式Elasticsearch服务器所暴露敏感信息的工具

    **Python在安全领域的应用:识别开放式Elasticsearch服务器暴露的敏感信息** Elasticsearch是一种流行的开源搜索引擎和数据分析工具,广泛应用于大数据处理、日志分析和实时监控等领域。然而,由于其默认配置通常...

    访问局域网中的所有 SQL Server 服务器的数据

    在IT领域,尤其是在数据库管理中,访问局域网内的所有SQL Server服务器数据是一项常见的任务,这对于数据集成、备份、监控和分析至关重要。SQL Server作为微软提供的一个强大的关系型数据库管理系统,广泛应用于各种...

Global site tag (gtag.js) - Google Analytics