python監控單台多例項資料庫伺服器的資料庫埠

2021-09-05 07:54:12 字數 2790 閱讀 6171

最近公司做資料庫的單台伺服器多例項,需要對各個資料庫的程序進行監控,因為我們的資產資料庫中已經有這個伺服器跑多少個例項,埠是什麼,用來做什麼的,所以就拿資產資料庫的埠和伺服器本地執行的資料庫埠進行對比,報出沒有執行的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 = '******'

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

0class check_port():#走資產中獲取本地ip中應該有多少個mysql例項埠

def __init__(self): 

conn = "ip a|grep glob|grep -v '192.168'|awk ''"

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: 

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 =  

ifnot psinfo: 

return local_port 

for i in psinfo: 

for j in i.split("--"): 

if j.find("port") != -1: 

port = j.split("=")[1].strip() 

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

0else: 

error = "" 

diff_list = list(set(local_port) ^ set(cent_port)) 

for port in diff_list: 

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(socket.af_inet, socket.sock_stream)

s.settimeout(2) 

address = '127.0.0.1'

port = 80

try: 

s.connect((address,port)) 

return

true

except exception,e: 

return

false

s.close() 

python監控單台多例項資料庫伺服器的資料庫埠

最近公司做資料庫的單台伺服器多例項,需要對各個資料庫的程序進行監控,因為我們的資產資料庫中已經有這個伺服器跑多少個例項,埠是什麼,用來做什麼的,所以就拿資產資料庫的埠和伺服器本地執行的資料庫埠進行對比,報出沒有執行的mysql例項以及他的用途。一種方法是根據 ps auxww grep mysqld...

mysql多例項配置 MySQL多例項資料庫配置

mysql多例項資料庫配置 1 登入進入mysql,在mysql 5.7.18 bin目錄下執行命令 mysql uroot p s usr local mysql 5.7.18 data 3307 mysql.sock 其中 p 是指定密碼,如果沒有密碼則可以不寫 p,s是指定sock檔案,mys...

centos 安裝多例項資料庫

centos 安裝多例項資料庫 2019年11月19日 19 05 一 安裝資料庫,可以編譯安裝,二進位制安裝,yum安裝等 二 準備三個例項目錄 mkdir pv mysql chown r mysql.mysql mysql 三 生成資料庫檔案 如果是二進位制安裝,則需要確定mysql inst...