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