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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

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

 
  1. #!/bin/env python 
  2. # -*- coding: utf-8 -*- 
  3.  
  4. import os,sys,MySQLdb 
  5.  
  6. def center(sql):#连接数据库 
  7.     try
  8.         center_ip = '192.168.1.100' 
  9.         center_user = 'root' 
  10.         center_passwd = 'xxxxxx' 
  11.         conn = MySQLdb.connect(host = center_ip,user = center_user,passwd = center_passwd,charset='utf8',connect_timeout=20
  12.         cursor = conn.cursor()  
  13.         cursor.execute(sql) 
  14.         alldata = cursor.fetchall() 
  15.         cursor.close() 
  16.         conn.close() 
  17.         return alldata 
  18.     except
  19.         return 0 
  20.  
  21. class check_port():#走资产中获取本地IP中应该有多少个mysql实例端口 
  22.  
  23.     def __init__(self): 
  24.         conn = "ip a|grep glob|grep -v '192.168'|awk '{print $2}'" 
  25.         self.host = os.popen(conn).readlines()[0].split("/")[0
  26.  
  27.     def remot(self): 
  28.         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 
  29.         alldata = center(sql) 
  30.         cent_port = [] 
  31.         if alldata != 0
  32.             for i in alldata: 
  33.                 cent_port.append(str(i[0])) 
  34.             return cent_port 
  35.         else
  36.             return cent_port 
  37.  
  38.     def local(self):#获取本地mysql有多少个实例运行 
  39.         psinfo = os.popen("ps auxww|grep mysqld|grep -v root|grep -v grep").readlines() 
  40.         local_port = [] 
  41.         if not psinfo: 
  42.             return local_port 
  43.         for i in psinfo: 
  44.             for j in i.split("--"): 
  45.                 if j.find("port") != -1
  46.                     port = j.split("=")[1].strip() 
  47.                     local_port.append(port) 
  48.         return local_port 
  49.  
  50.     def main(self): 
  51.         local_port = self.local() 
  52.         cent_port = self.remot() 
  53.                 cent_port.sort() 
  54.                 local_port.sort() 
  55.         if local_port == cent_port and len(local_port) != 0 and len(cent_port) != 0
  56.             print 0 
  57.         else
  58.             error = "" 
  59.             diff_list = list(set(local_port) ^ set(cent_port)) 
  60.             for port in diff_list: 
  61.                 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) 
  62.                 alldata = center(sql) 
  63.                 if error == "": 
  64.                     error = error + alldata[0][0
  65.                 else
  66.                     error = error + ";" + alldata[0][0
  67.             print error 
  68.  
  69. if __name__ == "__main__"
  70.     boss = check_port() 
  71.     boss.main() 

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

 
  1. ipmort socket 
  2.  
  3. def test_port() 
  4.     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  5. s.settimeout(2) 
  6.     address = '127.0.0.1' 
  7.     port = 80 
  8.     try
  9.         s.connect((address,port)) 
  10.         return True 
  11.     except Exception,e: 
  12.         return False     
  13. s.close()   

 


本文转自 lover00751CTO博客,原文链接:http://blog.51cto.com/wangwei007/1118809,如需转载请自行联系原作者


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
存储 API Python
Python文件操作:深入解析与实例
Python文件操作:深入解析与实例
|
3天前
|
数据采集 JSON 数据库
800个程序实例、5万行代码!清华大学出版【Python王者归来】
Python 的丰富模块(module)以及广泛的应用范围,使 Python 成为当下最重要的计算机语言之一,本书尝试将所有常用模块与应用分门别类组织起来,相信只要读者遵循本书实例,定可以轻松学会 Python 语法与应用,逐步向 Python 高手之路迈进,这也是撰写本书的目的。 本书以约 800 个程序实例讲解了:完整的 Python 语法,Python 的输入与输出,Python 的数据型态,列表(list)、元组(tuple)、字典(dict)、集合(set),函数设计,类别设计,使用系统与外部模块(module),设计自己的模块(module),文件压缩与解压缩,程序除错与异常处理…
|
4天前
|
弹性计算 监控 安全
【阿里云弹性计算】ECS实例监控与告警系统构建:利用阿里云监控服务保障稳定性
【5月更文挑战第23天】在数字化时代,阿里云弹性计算服务(ECS)为业务连续性提供保障。通过阿里云监控服务,用户可实时监控ECS实例的CPU、内存、磁盘I/O和网络流量等指标。启用监控,创建自定义视图集中显示关键指标,并设置告警规则(如CPU使用率超80%),结合多种通知方式确保及时响应。定期维护和优化告警策略,利用健康诊断工具,能提升服务高可用性和稳定性,确保云服务的卓越性能。
13 1
|
7天前
|
算法 程序员 Python
年底工资总结,实例教你用Python计算个税 依法纳税做好公民(1)
年底工资总结,实例教你用Python计算个税 依法纳税做好公民(1)
|
8天前
|
存储 NoSQL MongoDB
使用mongodb数据库实例
【5月更文挑战第9天】MongoDB中的集合类似关系数据库的表,但不强制模式,允许嵌入式文档以实现更灵活的数据布局。安装MongoDB在Ubuntu上涉及添加源列表和更新,CentOS则需创建配置文件。MongoDB支持备份和恢复,以及全文搜索。其灵活模式和动态模式减少了开发中的复杂性,但并非无模式,大部分数据仍具结构化特点。
86 2
|
9天前
|
存储 缓存 NoSQL
NoSQL缓存数据库的使用场景实例和命令速查表
【5月更文挑战第8天】Redis 是一个内存数据结构服务,用 C 编写,支持五种数据结构,不仅限于键值对。它用于缓存、消息队列、订阅/发布系统等,提供持久化、主从复制和集群支持。了解其核心数据结构和应用场景是有效利用 Redis 的关键。
66 3
NoSQL缓存数据库的使用场景实例和命令速查表
|
12天前
|
存储 Java 数据安全/隐私保护
Python----类对象和实例对象
Python----类对象和实例对象
11 2
|
12天前
|
Web App开发 设计模式 测试技术
python自动化测试实战 —— 自动化测试框架的实例
python自动化测试实战 —— 自动化测试框架的实例
|
12天前
|
关系型数据库 MySQL Linux
服务器Linux系统配置mysql数据库主从自动备份
这是一个基本的配置主从复制和设置自动备份的指南。具体的配置细节和命令可能因您的环境和需求而有所不同,因此建议在操作前详细阅读MySQL文档和相关资源,并谨慎操作以避免数据丢失或不一致。
30 3
|
12天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
19 6