博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python监控单台多实例数据库服务器的数据库端口
阅读量:6516 次
发布时间:2019-06-24

本文共 2582 字,大约阅读时间需要 8 分钟。

    最近公司做数据库的单台服务器多实例,需要对各个数据库的进程进行监控,因为我们的资产数据库中已经有这个服务器跑多少个实例,端口是什么,用来做什么的,所以就拿资产数据库的端口和服务器本地运行的数据库端口进行对比,报出没有运行的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()   

 

转载地址:http://htafo.baihongyu.com/

你可能感兴趣的文章
单片机小白学步系列(九) 用万用焊板搭建实验电路
查看>>
(转)全文检索技术学习(三)——Lucene支持中文分词
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
阿里盒马领域驱动设计实践
查看>>
vuex 存值 及 取值 的操作
查看>>
HDU 2242 考研路茫茫——空调教室(边双连通)
查看>>
如何在C#项目中使用NHibernate
查看>>
安装python包到指定虚拟环境
查看>>
力扣(LeetCode)21
查看>>
网页视频流m3u8/ts视频下载
查看>>
Python 基础起步 (十) 什么叫函数?
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战
查看>>
使用Swoole加速Laravel(正式环境中)
查看>>
mockjs让前端开发独立于后端
查看>>
延迟脚本的方式
查看>>
1.4linux单用户模式下修改root密码和救援模式修改root密码
查看>>
微服务架构优缺点
查看>>
解读userenv的日志
查看>>