Python监视MySQL正在运行的SQL

下面是代码片断,写得比较简陋,基本想法就是使用os.popen方法执行一段命令脚本mysql -uroot -padmin -e "show full processlist;"(不太好的一点是这里写了root用户的密码,比较危险),而后逐行扫描,将带有SQL关键字的行,写入文本文件,文本文件按照当前的时间保存。python

# -*- coding: utf-8 -*-  
import os
import codecs
import datetime

if __name__ == "__main__":
	cmd = 'mysql -uroot -padmin -e "show full processlist;"'
	fd = os.popen(cmd)	
	content = []
	for line in fd:
		lower_line = line.lower()
		if lower_line.find('select') != -1 or (lower_line.find('update') != -1 and lower_line.find('table') != -1) or lower_line.find('insert') != -1 or lower_line.find('delete') != -1 or lower_line.find('create') != -1 or lower_line.find('alter') != -1 or lower_line.find('drop') != -1 or lower_line.find('truncate') != -1:
			content.append(line.strip())
	fd.close()
	now = str(datetime.datetime.now())
	p = now.index('.')
	now = now[:p]
	now = now.replace('-','').replace(':','').replace(' ','')
	try:
		os.mkdir('/root/mysqlprocesslist/')
	except Exception:
		print '/root/mysqlprocesslist/ folder alreay exist, no need to create'
	if len(content) > 0:
		fw = codecs.open('/root/mysqlprocesslist/'+now, 'w', 'utf-8')
		for c in content:
			fw.write(c+'\n')
		fw.close()

 

写完这个脚本后,在/etc/crontab中,写上mysql

*/1 * * * * root python py_cmd.py

就能够每分钟监视了。sql

相关文章
相关标签/搜索