Mysql数据库怎么实现利用sql语句编写一个慢查询监控脚本

  介绍

本篇文章为大家展示了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   null

Mysql数据库怎么实现利用sql语句编写一个慢查询监控脚本