本篇文章为大家展示了Mysql数据库怎么实现利用sql语句编写一个慢查询监控脚本,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强> 1,修强>
改my . cnf中所做#整体的效果,全局开启表和日志文件都写,但是对于general_log只写表,对于slow_query_log,表和日志文件都记录。 general_log=1 #开启mysql执行sql的日志,slow_query_log=1 #开启mysql慢sql的日志 #设置之后会影响general_log和slow_query_log, log_output=表、文件#日志输出会写表,也会写日志文件,为了便于程序去统计,所以最好写表 #这里没配置general_log_file,那么general_log就只会写表了 #在mysql5.1.29以上,设置以下即可打开mysql将执行的sql记录在文件中 # general_log_file=/日志/general.log # 5.1.29以以前为: #日志=/var/lib/mysql/sql_row.log long_query_time=1 #设置mysql的慢查询为超过1 s的查询,slow_query_log_file=/日志/慢。日志
<强> 2,修改mysql的日志表(在mysql库中)的格式强>
#默认general_log是csv的格式,修改为MyISAM格式查询效率会高很多
设置全球general_log=,
alter table general_log引擎=MyISAM;
集全球general_log=> CREATE TABLE “slow_log_dba”, ( ,‘start_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 提醒UPDATE CURRENT_TIMESTAMP, ,‘user_host mediumtext NOT 空, ,‘query_time time NOT 空, ,‘lock_time time NOT 空, ,' rows_sent ' int (11), NOT 空, ,' rows_examined ' int (11), NOT 空, ,“分贝”varchar (512), NOT 空, ,' last_insert_id ' int (11), NOT 空, ,' insert_id ' int (11), NOT 空, ,' server_id ' int (10), unsigned NOT 空, ,‘sql_text mediumtext NOT NULL ),引擎=MyISAM DEFAULT CHARSET=utf8 评论=& # 39;Slow log for dba # 39;;
建立general_log_dba的表
CREATE TABLE “general_log_dba”, ( ,‘event_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 提醒UPDATE CURRENT_TIMESTAMP, ,‘user_host mediumtext NOT 空, ,' thread_id ' int (11), NOT 空, ,' server_id ' int (10), unsigned NOT 空, ,‘command_type varchar (64), NOT 空, ,“参数”mediumtext NOT 空, ,KEY “user_host”, (“user_host”(200)), ,KEY “event_time”, (“event_time”) ),引擎=MyISAM DEFAULT CHARSET=utf8 评论=& # 39;general log for dba op # 39;;<强> 4,因为程序最终使用的general_log_dba和slow_log_dba的表,所以需要定时的将general_log和slow_query_log的数据拷贝到general_log_dba和slow_log_dba之中强>
因为报告是每天生成一次,所以这个动作只要每天操作一次即可
#脚本是保存10天得数据,每天将general_log和slow_query_log的数据拷贝到general_log_dba和slow_log_dba之中
#做定时任务每天执行一次mysqllogtable.sh
# !/bin/sh
NDaysAgo=$(日期- d & # 39; -10天# 39;“H + % F %: % M: % S")
/usr/地方/mysql/bin/mysql -uXXXX - p # 39; xxxxxxxx& # 39;- d # 39; mysql # 39;- e“插入general_log_dba select * from general_log;
截断general_log;
删除从general_log_dba event_time & lt;\“NDaysAgo \“美元;
插入slow_log_dba select * from slow_log;
截断slow_log;
删除从slow_log_dba start_time & lt;\“NDaysAgo \“美元;“
引用><强> 5,python脚本写统计每天sql操作和每天的mysql的慢查询(脚本中有部分是可以抽象的方法,请自己酌情处理)强>
统计mysql每日执行记录的脚本
#, - *安康;编码:utf-8 - * - 时间=__author__ & # 39;河# 39; import MySQLdb  as mysql import 再保险 得到datetime import  datetime, timedelta import smtplib 得到email.mime.text import  MIMEText def sendHtmlMail (mailcontent myip): 尝试才能: 昨天,,,=(datetime.now () -timedelta(天=1).strftime (“Y % - % - % d") ,,,sender =, & # 39; xxx@xxx.com& # 39; ,,,receiver =, (& # 39; xxx@xxx.com& # 39;) ,,,subject =, myip + & # 39;, mysql operation report & # 39; +昨天 ,,,smtpserver =, & # 39; smtp.exmail.xx.com& # 39; ,,,username =, & # 39; xxx@xxx.com& # 39; ,,,password =, & # 39; xxxxx # 39; ,,,msg =, MIMEText (mailcontent & # 39; html # 39;, & # 39; utf - 8 # 39;) # & # 39;你好& # 39;& # 39;文本# 39;,& # 39;utf - 8 # 39; ,,,味精(& # 39;主题# 39;],=, ,,,味精(& # 39;从# 39;],=,发送者 ,,,味精(& # 39;伍仟# 39;],=,& # 39;xxx@xxxxxxxx.com& # 39; ,,,smtp =, smtplib.SMTP () ,,,smtp.connect (smtpserver) ,,,smtp.login(用户名,密码) ,,,smtp.sendmail(发送器,接收器,msg.as_string ()) ,,,smtp.quit () ,,except 例外,e: ,,,print e & # 39; send mail 错误# 39; if __name__==& # 39; __main__ # 39;:=,结果没有 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullMysql数据库怎么实现利用sql语句编写一个慢查询监控脚本