0

0

宝塔面板下如何监控MySQL数据库的锁表与死锁情况?

P粉602998670

P粉602998670

发布时间:2026-03-13 20:26:31

|

858人浏览过

|

来源于php中文网

原创

若MySQL出现响应慢、超时或“Lock wait timeout exceeded”报错,可能由表级锁阻塞或死锁引起,可通过四类方法排查:一、用INNODB_TRX等系统视图实时查锁与死锁;二、启用慢查询日志并过滤含lock/wait/for update的SQL;三、部署pt-deadlock-logger自动捕获结构化死锁日志;四、用宝塔计划任务定时导出锁状态快照。

宝塔面板下如何监控mysql数据库的锁表与死锁情况?

如果您在宝塔面板环境下运行MySQL数据库,但发现查询响应缓慢、部分操作长时间无返回或应用报错提示“Lock wait timeout exceeded”,则可能是由于表级锁阻塞或事务间发生死锁所致。以下是监控MySQL锁表与死锁情况的具体方法:

一、通过MySQL内置命令实时查看锁等待与死锁信息

该方法直接连接MySQL服务器,利用系统视图获取当前锁状态和最近死锁日志,无需额外安装组件,适用于所有MySQL 5.5及以上版本。

1、使用SSH登录服务器,执行命令进入MySQL客户端:mysql -u root -p,输入宝塔面板中设置的MySQL root密码。

2、执行查询语句获取当前被阻塞的事务及锁等待关系:SELECT * FROM information_schema.INNODB_TRX\G;

3、查看当前所有锁信息(包括行锁、表锁):SELECT * FROM information_schema.INNODB_LOCKS\G;

4、查看锁等待链路(显示哪个事务在等待哪个锁):SELECT * FROM information_schema.INNODB_LOCK_WAITS\G;

5、查看最近一次死锁详细信息(仅保留最后一次):SHOW ENGINE INNODB STATUS\G;,在输出结果中查找“LATEST DETECTED DEADLOCK”段落。

二、启用MySQL慢查询日志并过滤锁相关SQL

该方法通过记录执行时间超阈值且含锁操作的SQL语句,辅助定位长期持有锁或未提交事务的源头,需配合日志分析工具使用。

1、在宝塔面板中进入【软件商店】→ 找到已安装的MySQL → 点击【设置】→ 【配置修改】。

2、在配置文件中找到slow_query_log行,将其值设为ON;若不存在则手动添加:slow_query_log = ON

3、设置慢查询阈值(单位秒),例如锁定类操作通常耗时较长,可设为1秒:long_query_time = 1

4、指定慢日志路径,确保目录可写,例如:slow_query_log_file = /www/server/data/mysql-slow.log

5、保存配置后,点击【重启】MySQL服务使配置生效。

Cliclic AI
Cliclic AI

Cliclic商品背景图编辑器是一款功能强大的AI工具,帮助用户快速生成具有吸引力的商品图背景。

下载

6、使用命令实时追踪新增的慢查询记录:tail -f /www/server/data/mysql-slow.log | grep -i "lock\|wait\|for update\|select ... for update"

三、部署pt-deadlock-logger工具自动捕获死锁事件

该方法借助Percona Toolkit中的专用工具,以守护进程方式持续轮询INNODB_STATUS,将每次死锁信息结构化写入本地表或日志文件,适合需要长期归档分析的场景。

1、通过SSH执行命令下载并安装Percona Toolkit:wget https://downloads.percona.com/downloads/percona-toolkit/3.5.4/binary/debian/bionic/x86_64/percona-toolkit_3.5.4-1.bionic_amd64.deb && apt install -y ./percona-toolkit_3.5.4-1.bionic_amd64.deb

2、创建用于存储死锁日志的数据库和表:mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS pt; CREATE TABLE IF NOT EXISTS pt.deadlocks (serverid VARCHAR(32), ts TIMESTAMP, thread_id BIGINT, txn_id BIGINT, txn_time INT, user VARCHAR(32), hostname VARCHAR(32), ip VARCHAR(46), db VARCHAR(64), tbl VARCHAR(64), idx VARCHAR(64), lock_type VARCHAR(32), lock_mode VARCHAR(32), lock_id VARCHAR(128), lock_trx_id BIGINT, pid INT, program_name VARCHAR(128), query TEXT, PRIMARY KEY(serverid, ts));"

3、执行死锁日志采集命令(后台运行):nohup pt-deadlock-logger --user=root --password=your_mysql_root_password --dest D=pt,t=deadlocks --interval=30 --run-time=86400 --daemonize &,其中your_mysql_root_password需替换为实际密码。

4、验证数据是否写入:mysql -u root -p -e "SELECT * FROM pt.deadlocks ORDER BY ts DESC LIMIT 5;"

四、利用宝塔面板计划任务定期导出锁状态快照

该方法将锁信息采集过程脚本化,并通过宝塔计划任务定时执行,生成带时间戳的文本快照,便于人工比对锁状态变化趋势。

1、新建Shell脚本文件:vi /www/server/script/check_mysql_lock.sh

2、在编辑器中写入以下内容(注意替换your_password为真实MySQL root密码):#!/bin/bash\nDATE=$(date +\%Y\%m\%d_\%H\%M\%S)\nmysql -uroot -pyour_password -e "SELECT trx_id,trx_state,trx_started,trx_wait_started,TRX_QUERY FROM information_schema.INNODB_TRX WHERE trx_state='LOCK WAIT' OR trx_wait_started IS NOT NULL;" > /www/server/script/lock_wait_${DATE}.log\nmysql -uroot -pyour_password -e "SHOW ENGINE INNODB STATUS\G" | grep -A 20 "LATEST DETECTED DEADLOCK" > /www/server/script/deadlock_${DATE}.log

3、赋予脚本执行权限:chmod +x /www/server/script/check_mysql_lock.sh

4、进入宝塔面板【计划任务】→ 【添加计划任务】→ 类型选择【Shell脚本】→ 执行周期设为每10分钟一次 → 脚本内容填写:/www/server/script/check_mysql_lock.sh

5、保存后等待首次执行完成,检查/www/server/script/目录下是否生成形如lock_wait_20240520_143000.log的文件。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1134

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2194

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1703

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

586

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

440

2024.04.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号