#!/usr/bin/env python # coding:utf-8 import MySQLdb import requests, json import time url = "http://api.sendcloud.net/apiv2/mail/send" key = {} params = {} #目标用户的邮箱 to_email = {'root': ["xxxx@xxx.com ", ], 'tianyi': ["x@qq.com", "x@sina.com", ]} #对发送邮件的格式的配置 def sendmail(mail_list, sql): for number in range(len(mail_list)): params['apiUser'] = "xxx" params['apiKey'] = "0Mxb0ag" params['from'] = "x@foxmail.com" params['fromName'] = "bill" params['subject'] = "warning" params['html'] = "your sqlserver is dangerous: " + sql params['to'] = mail_list[number] r = requests.post(url, files={}, data=params) print r.text time.sleep(1) if __name__ == "__main__": while True: #配置数据库,root用户可以看见所有用户的线程 conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='x') cur = conn.cursor() reCount = cur.execute('show processlist;') for i in cur.fetchall(): print i # 判断对用户的操作 number = 0 #i[4]对应的是Command,i[5]是Time,当sql语句处于执行的状态,并且时间大于1秒的时候 if i[4] == 'Query' and i[5] >= 1: while number < i[5]: # 发送邮件 sendmail(to_email[i[1]], str(i[7])) number = number + 1 # 如果此时大于5秒就杀死进程 if number == 4: id = str(i[0]) print id sql = 'kill ' + id + ';' cur.execute(sql) break time.sleep(1) cur.close() conn.close() time.sleep(1) #配置说明 #修改所处mysql服务器的连接信息: conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='x') #所拥有用户及其对应的邮箱地址:to_email = {'root': ["x@xx.com ", ], 'tianyi': ["x@qq.com", "x@sina.com", ]} #使用的相关的sendcloud api配置:sendmail()
参考资料:https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html
http://www.linuxidc.com/Linux/2016-02/128558.htm