日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 数据库慢查询日志分析脚本

發布時間:2025/5/22 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 数据库慢查询日志分析脚本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

這個腳本是基于pt-query-digest做的日志分析腳本,變成可視化的格式。

?

目錄結構是

./mysql_data/log
./mysql_data/log/tmp
./slow_query

?

# coding = gbk __author__ = 'T_two'import datetime import osIP = '111' dirname = os.path.dirname(os.path.abspath(__file__)) # 解析后的目錄名 slow_query= os.path.join(dirname, 'slow_query') # pt-query-digest前的目錄的 mysql_data = os.path.join(os.path.join(dirname, 'mysql_data'), 'log') # pt-query-digest后的目錄的 tmp = os.path.join(mysql_data, 'tmp')def getYesterday():today=datetime.date.today()yesterday = str(today - datetime.timedelta(days=1))return yesterdaydef getLog(yes_time, slow_query):# 對日志進行pt-query-digest分析before_name = yes_time.replace('-', '') + '-' + 'slow-query.log'# pt-query-digest之前的日志 b_filenameb_filename = os.path.join(mysql_data, before_name)# print(b_filename)# pt-query-digest之后的日志 a_filenameafter_name = yes_time.replace('-', '') + '-' + IP + '-' + 'slow-query.log'a_filename = os.path.join(tmp, after_name)# print(a_filename)# 最終格式化的日志 e_filenameend_name = IP + '-slow-log-' + yes_time + '.txt'e_filename = os.path.join(slow_query, end_name)#print(e_filename)return b_filename,a_filename,e_filenamedef getSlowquery(b_filename,a_filename,e_filename):print('File format starting...')#os.system('pt-query-digest '+ b_filename + '>' + a_filename)a_slow_query = open(a_filename, 'r', encoding = 'utf8')e_slow_query = open(e_filename, 'w', encoding = 'utf8')_line = ''line = a_slow_query.readlines()[20:] # 對文件切片,去除不需要的前20行。for line in line:line = line.strip()# 提取需要的行if line.startswith('#') and '# Hosts' not in line and '# Users' not in line and '# Databases' not in line and 'byte' not in line \and '# Count' not in line and '# Exec time' not in line :passelif line == '':passelse:# 序列號if '# Query' in line: line = ('\nNO.%s' % line.split()[2])# 執行次數elif '# Count' in line: line = ('執行次數: %s' % line.split()[3])#執行時間elif '# Exec time' in line: line = ('執行時間 Total: %s min: %s max: %s' % (line.split()[4],line.split()[5],line.split()[6],))# DBelif '# Databases' in line: line = ('庫名: %s' % line.split()[2])# 源IPelif '# Host' in line:line = ('源IP: %s' % line.split()[2])# 用戶名elif '# User' in line: line = ('用戶名: %s' % line.split()[2])_line = _line + line + '\n'e_slow_query.write(_line)a_slow_query.close()e_slow_query.close()# 將文件拷貝到web目錄下os.system('cp ' + e_filename + ' ' + web_dir)# 刪除10天之前的數據os.system('find ' + str(slow_query) + ' -mtime +10 | xargs rm -rf ')os.system('find ' + mysql_data + ' -mtime +10 | xargs rm -rf ')os.system('find ' + tmp + ' -mtime +10 | xargs rm -rf ')print ('File format end...')if __name__ == '__main__':yes_time = getYesterday()b_filename,a_filename, e_filename = getLog(yes_time, slow_query)getSlowquery(b_filename,a_filename,e_filename)

  

?

解析之后顯示的結果:

?

轉載于:https://www.cnblogs.com/yujiaershao/p/10237770.html

總結

以上是生活随笔為你收集整理的MySQL 数据库慢查询日志分析脚本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。