MySQL收集processlist记录的shell工具mysql_collect_processlist

文章目录

    • 安装指南
    • 日志文件内容
    • 日志分析参考
      • 1.简单检索
      • 2.统计不同状态的语句的数量
      • 3.按照时间统计
    • 注意事项
    • 仓库


这是一个纯脚本工具,用于从MySQL的information_schema.processlist视图中定期收集数据并保存到本地日志文件。支持MYSQL5.7-9.4版本。

template copy from PostgreSQL version : https://github.com/yansheng836/pg_collect_pgsa .

相关背景

  1. 某个慢SQL打满内存,导致系统kill掉mysql的进程,进而导致mysql进程重启,没有现场排查不了具体原因。(即使开启了慢SQL日志,没有执行完也不会记录到数据库日志中)
  2. 数据库连接数被打满,MYSQL相关监控数据丢失(因为也连不上数据库了),没有现场,不知道异常请求来源。

特性

  • 定期收集MySQL活动会话信息
  • 支持通过定时任务配置收集频率
  • 提供日志文件自动分割功能
  • 包含丰富的日志分析示例

安装指南

拉取代码,修改参数,设置定时任务。

# 克隆代码
git clone git@github.com:yansheng836/mysql_collect_processlist.git
cd mysql_collect_processlist# 修改必要参数(均以 MYSQL_ 开头,例如:MYSQL_PATH、MYSQL_HOST 等)
vi mysql_collect_processlist.sh# 查路径
pwd# crontab -e
# 每分钟执行
* * * * * sh pwd路径/mysql_collect_processlist.sh# 如果需要更频繁,比如每5秒执行(可自行调整秒数)
* * * * * sh pwd路径/mysql_collect_processlist_gap_second.sh 5

日志文件内容

测试版本:mysql Ver 8.0.43 for Linux on x86_64 (MySQL Community Server - GPL)

CI版本:MYSQL5.7-9.4

输出字段为:now(),ID,USER,HOST,DB,COMMAND,TIME,STATE,INFO

2025-09-09 14:44:02|42|root|localhost|mysql|Query|0|executing|SELECT now(),ID,USER,HOST,DB,COMMAND,TIME,STATE,INFO from information_schema.processlist
2025-09-09 14:44:02|5|event_scheduler|localhost|NULL|Daemon|8000|Waiting on empty queue|NULL

日志分析参考

1.简单检索

# cat/more/less/grep 
grep 'executing' processlist.log# 查找具体时间的相关日志
grep '2025-09-04 12:59' processlist.log# 在归档日志中,查找具体时间的相关日志
zless logs/processlist-20250904-12.log.gz  | grep '2025-09-04 12:59'

2.统计不同状态的语句的数量

# 第8列是状态:state
awk -F '|' '{print $8}' processlist.log | sort | uniq -c1 executing1 Waiting on empty queue

3.按照时间统计

# 按天统计
awk -F '|' '{print $1}' processlist.log | cut -d ' ' -f1 | sort | uniq -c2 2025-09-09
# 按小时统计
awk -F '[| ]' '{print $1 " " $2}' processlist.log | cut -d: -f1 | sort | uniq -c2 2025-09-09 14
# 按分钟统计
awk -F '[| ]' '{print $1 " " $2}' processlist.log | cut -d: -f1-2 | sort | uniq -c2 2025-09-09 14:44

注意事项

  1. 在业务繁忙的数据库上使用时,需要注意日志文件可能会快速增长,建议在特殊情况下短暂使用,并密切关注磁盘空间。

  2. info字段的长度受MySQL常量PROCESS_LIST_INFO_WIDTH限制,默认为65535(写死在源码中),超出部分会被截断。(足以满足绝大多数场景。)

  3. 账号权限问题,可不使用mysql。推荐最小权限:[创建空库,]创建普通用户,授予PROCESS权限即可。

    -- CREATE DATABASE processlist_db;
    GRANT PROCESS ON *.* TO 'processlist_user'@'hostname';
    

仓库

详见::

GitHub:https://github.com/yansheng836/mysql_collect_processlist/issues

Gitee:https://gitee.com/yansheng0083/mysql_collect_processlist/issues

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/96313.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/96313.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业RFID现场网关模块:实现多协议互通,128台读写设备互连!

随着工业4.0进程加速,企业对生产系统集成度的需求不断增长。在工厂中常需整合不同品牌PLC、驱动器、机械臂、读写器等设备系统,这其中就会涉及到如Profinet、EtherNet/IP、EtherCAT、Modbus TCP、CC-LINK IE等不同通讯协议连接。虽可将部分设备直接与PLC…

黑马点评高级篇第7节课 输入INFO replication 显示0个从节点,但是在7002节点又显示它已经是7001节点的从节点了

问题描述在黑马点评高级篇第七节课的这个位置​​​​​​,当我输入INFO replication 的时候下面本应该显示为connected_slaves: 2,但是我的显示的是0。然后当我切换到7002端口的节点时,又显示7002就是7001的从节点解决我看弹幕上说在7002和7…

pcb线路板打样厂家有哪些?

在电子制造产业升级浪潮中,PCB打样环节的效率与品质直接影响产品迭代速度。本文聚焦国内五家具备核心技术竞争力的PCB打样厂商,深度解析其差异化优势,为硬件开发者提供精准选型参考。猎板PCB作为国家高新技术企业,猎板PCB在高频高…

【python实用小脚本-211】[硬件互联] 桌面壁纸×Python梦幻联动|用10行代码实现“开机盲盒”自动化改造实录(建议收藏)

1. 场景故事 “作为HR,我曾每天手动换壁纸提神,直到某天忙到忘记,结果被同事截图当‘黑历史’…” → 转折点:用Python调用Windows API写了个“随机壁纸机”,开机自启,每次登录都是新风景,现在截…

集成学习 —— 梯度提升树GBDT、XGBoost

目录 一、梯度提升树 1、残差提升树 Boosting Decision Tree 2、梯度提升树 Gradient Boosting Decision Tree 二、构建案例 1、 初始化弱学习器(CART树): 2、 构建第1个弱学习器 3、 构建第2个弱学习器 4、 构建第3个弱学习器 5、 构建最终弱学习器 6、 构…

【船类】监控录像下船舶类别检测识别数据集:近7k图像,6类,yolo标注

监控录像下船舶类别检测识别数据集概述 数据集包含 6900监控录像下船舶类别图像,6个标注类别: 散货船、集装箱船、渔船、杂货船、矿砂船、客船 标注格式:yolo txt(格式可转,可直接训练) 标注工具&#…

用户故事设计范式(As a... I want to... So that...)

我们来详细解析一下用户故事(User Story),包括其结构、为什么重要、如何编写好的用户故事以及一个完整的示例。1. 用户故事的基本结构:三段式模板最经典和通用的用户故事模板就是您提到的三段式:As a [角色]:目的&…

【OpenGL】LearnOpenGL学习笔记20 - 实例化 Instancing

上接:https://blog.csdn.net/weixin_44506615/article/details/151156446?spm1001.2014.3001.5501 完整代码:https://gitee.com/Duo1J/learn-open-gl | https://github.com/Duo1J/LearnOpenGL 实例化 Instancing 以往当我们在场景中要大量绘制相同模型…

MySQL主从不一致?DBA急救手册:14种高频坑点+3分钟定位+无损修复!

MySQL「主从不一致」最常见的成因、快速定位思路以及可落地的修复手段 一、为什么会不一致?14 类高频场景类别典型表现/触发条件快速自检命令/日志1. 从库被写入业务或 DBA 直连从库 UPDATE/INSERTSHOW VARIABLES LIKE read_only 应为 ON2. 复制过滤规则主从 binlog…

AI 网站源码:探秘 SUNO,革新音乐创作的 AI 先锋

在当今数字化浪潮中,人工智能(AI)正深刻地重塑各个领域,音乐创作也不例外。SUNO 作为一款引领潮流的音乐生成工具,宛如一颗璀璨新星,在音乐创作的天空中熠熠生辉,为音乐爱好者和创作者们带来了前…

Linux:malloc背后的实现细节

目录前言一、先搞懂基础:程序的内存布局(关键前提!)二、malloc的核心实现步骤(4层架构拆解)第1层:用户调用 → 标准库处理(glibc的malloc.c)第2层:堆内存池管…

什么是X11转发?

X11 转发(X11 forwarding,ssh -X)是一种 SSH 协议功能,它允许用户在远程服务器上运行图形化应用程序,并通过本地的显示设备和输入输出设备与这些程序进行交互。它被开发者广泛使用,用于在大规模、异构的服务…

Android Kotlin 动态注册 Broadcast 的完整封装方案

在 Kotlin 中封装动态注册的 Broadcast 可以让你更优雅地管理广播的注册和注销,避免内存泄漏。下面是一个完整的封装方案: 基础封装类 import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import …

VGG改进(8):融合Self-Attention的CNN架构

1. 自注意力机制简介自注意力机制是Transformer架构的核心组件,它能够计算输入序列中每个元素与其他所有元素的相关性。与CNN的局部感受野不同,自注意力机制允许模型直接建立远距离依赖关系,从而捕获全局上下文信息。在计算机视觉中&#xff…

ES6 面试题及详细答案 80题 (33-40)-- Symbol与集合数据结构

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

PG-210-HI 山洪预警系统呼叫端:筑牢山区应急预警 “安全防线”

在山洪灾害多发的山区,及时、准确的预警信息传递是保障群众生命财产安全的关键。由 PG-210-HI 型号构成的山洪预警系统呼叫端主机,凭借其全面的功能、先进的特性与可靠的性能,成为连接管理员与群众的重要应急枢纽,为山区构建起一道…

研学旅游产品设计实训室:赋能产品落地,培养实用人才

1. 研学旅游产品设计实训室的定位与功能 研学旅游产品设计实训室是专门为学生提供研学课程与产品开发、模拟设计、项目推演、成果展示等实践活动的教学空间。该实训室应支持以下功能: 研学主题设计与目标制定; 课程内容与学习方法的选择与整合&#xf…

4215kg轻型载货汽车变速器设计cad+设计说明书

第一章 前言 3 1.1 变速器的发展环绕现状 3 1.2 本次设计目的和意义 4 第二章 传动机构布置方案分析及设计 5 2.1 传动机构结构分析与类型选择 5 2.2变速器主传动方案的选择 5 2.3 倒档传动方案 6 2..4 变速器零、部件结构方案设计 6 2.4.1 齿轮形式 …

9月10日

TCP客户端代码#include<myhead.h> #define SER_IP "192.168.108.179" //服务器&#xff49;&#xff50;地址 #define SER_PORT 8888 //服务器端口号 #define CLI_IP "192.168.108.239" //客户端&#xff49;&#xff50;地址 …

案例开发 - 日程管理 - 第七期

项目改造&#xff0c;进入 demo-schedule 项目中&#xff0c;下载 pinia 依赖在 main.js 中开启 piniaimport { createApp } from vue import App from ./App.vue import router from ./router/router.js import {createPinia} from pinialet pinia createPinia() const app …