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

2021-09-22 05:19:23 字數 3126 閱讀 4226

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

defcenter(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] 

defremot(

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 =  

ifalldata != 0: 

fori 

inalldata: 

])) 

return

cent_port 

else

: return

cent_port 

deflocal(

self

):#獲取本地mysql有多少個例項執行

psinfo = os.popen("ps auxww|grep mysqld|grep -v root|grep -v grep"

).readlines() 

local_port =  

ifnot

psinfo: 

return

local_port 

fori 

inpsinfo: 

forj 

ini.split(

"--"

): if

j.find(

"port"

) != -1: 

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

].strip() 

return

local_port 

defmain(

self

): local_port = self

.local() 

cent_port = self

.remot() 

cent_port.sort() 

local_port.sort() 

iflocal_port == cent_port 

andlen(local_port) != 

0and

len(cent_port) != 0: 

print

0else

: error = "" 

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

forport 

indiff_list: 

% (self

.host,port) 

alldata = center(sql) 

iferror == "": 

error = error + alldata[0][0

] else

: error = error + ";"

+ alldata[0][

0] print

error 

if__name__ == 

"__main__"

: boss = check_port() 

boss.main() 

如果用第二種方法的話,很簡單,用下面的函式可以實現這個埠測試:

ipmort socket 

deftest_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...