MySQL如何查看当前连接用户和运行状态?(实用命令汇总)

原创 2025-07-30 10:07:00编程技术
687

在MySQL数据库的日常运维中,监控当前连接用户和系统运行状态是核心任务之一。无论是排查性能瓶颈、诊断连接泄漏问题,还是审计用户操作,都需要熟练掌握相关命令。本文ZHANID工具网将系统梳理MySQL中查看连接与状态的实用命令,涵盖基础查询、性能分析、进程管理等场景,帮助DBA和开发者快速定位问题。

一、查看当前连接用户的核心命令

1.1 SHOW PROCESSLIST:基础连接列表

这是最常用的查看连接信息的命令,显示当前所有活动线程的基本信息:

SHOW FULL PROCESSLIST;

输出字段说明

  • Id:连接线程ID(用于终止特定连接)

  • User:连接用户名

  • Host:客户端主机及端口

  • db:当前使用的数据库

  • Command:执行中的命令类型(Query/Sleep/Connect等)

  • Time:连接持续时间(秒)

  • State:线程当前状态(如"Sending data"、"Locked")

  • Info:正在执行的SQL语句(使用FULL关键字显示完整语句)

典型场景

  • 发现异常连接(如长时间运行的SLEEP连接)

  • 识别阻塞其他操作的查询

  • 统计各用户连接数

1.2 information_schema.PROCESSLIST:结构化查询

MySQL 5.1+版本提供系统视图,支持更灵活的查询:

SELECT * FROM information_schema.PROCESSLIST 
WHERE COMMAND != 'Sleep' AND TIME > 60 
ORDER BY TIME DESC;

优势

  • 可与其他表关联分析

  • 支持复杂WHERE条件过滤

  • 适合集成到监控脚本中

1.3 performance_schema.threads:详细线程信息

MySQL 5.6+版本通过performance_schema提供更全面的线程监控:

SELECT 
  THREAD_ID, 
  PROCESSLIST_ID, 
  PROCESSLIST_USER, 
  PROCESSLIST_HOST, 
  PROCESSLIST_DB,
  PROCESSLIST_COMMAND,
  PROCESSLIST_TIME,
  PROCESSLIST_STATE,
  PROCESSLIST_INFO
FROM performance_schema.threads 
WHERE PROCESSLIST_ID IS NOT NULL;

独特价值

  • 包含内部线程信息(如IO线程、复制线程)

  • 可关联events_waits_current表分析线程等待事件

1.4 终止异常连接

-- 终止指定ID的连接
KILL [CONNECTION|QUERY] process_id;

-- 示例:终止ID为123的连接
KILL CONNECTION 123;

区别

  • KILL CONNECTION:立即断开连接(默认)

  • KILL QUERY:仅终止当前查询,保持连接活跃

二、深度监控运行状态

2.1 SHOW STATUS:全局状态变量

提供MySQL服务器运行时的累计统计信息:

SHOW GLOBAL STATUS LIKE 'Threads%';

关键指标

  • Threads_connected:当前活动连接数

  • Threads_running:非SLEEP状态的线程数

  • Connections:累计连接尝试次数

  • Aborted_connects:失败连接尝试次数

监控脚本示例

#!/bin/bash
mysql -e "SHOW GLOBAL STATUS LIKE 'Threads%'" | awk 'NR>1 {print $2}'

2.2 SHOW VARIABLES:配置参数查询

查看与连接相关的配置参数:

SHOW VARIABLES LIKE '%max_connections%';
SHOW VARIABLES LIKE '%thread%';

核心参数

  • max_connections:最大允许连接数

  • thread_cache_size:线程缓存大小

  • wait_timeout:非交互连接超时时间

  • interactive_timeout:交互连接超时时间

2.3 SHOW ENGINE INNODB STATUS:InnoDB引擎状态

获取锁等待、事务信息等深度数据(需SUPER权限):

SHOW ENGINE INNODB STATUS\G

关键部分解析

------------
TRANSACTIONS
------------
Trx id counter 123456
Purge done for trx's n:o < 123450 undo n:o < 0
History list length 123
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 123455, ACTIVE 10 sec
2 lock struct(s), heap size 376, 1 row lock(s)
MySQL thread id 10, OS thread handle 0x7f8a1b2c4700, query id 1234 192.168.1.100 root updating
UPDATE orders SET status='shipped' WHERE id=1001

分析要点

  • 识别长时间运行的事务

  • 发现锁等待情况

  • 检查undo日志和历史列表长度

2.4 performance_schema高级监控

MySQL 5.6+版本可通过performance_schema实现精细化监控:

2.4.1 连接池分析

SELECT 
  USER, 
  HOST, 
  COUNT(*) AS connections 
FROM performance_schema.threads 
WHERE TYPE='FOREGROUND' 
GROUP BY USER, HOST 
ORDER BY connections DESC;

2.4.2 锁等待检测

SELECT 
  r.trx_id waiting_trx_id,
  r.trx_mysql_thread_id waiting_thread,
  r.trx_query waiting_query,
  b.trx_id blocking_trx_id,
  b.trx_mysql_thread_id blocking_thread,
  b.trx_query blocking_query
FROM performance_schema.events_waits_current e
JOIN information_schema.innodb_trx b ON b.trx_id = e.SOURCE_IDENTIFIER
JOIN information_schema.innodb_trx r ON r.trx_id = e.OBJECT_IDENTIFIER
WHERE e.EVENT_NAME = 'wait/lock/metadata/sql/mdl';

mysql.webp

三、实用工具与技巧

3.1 mysqladmin命令行工具

快速查看服务器状态:

# 查看连接数
mysqladmin -u root -p processlist

# 查看状态变量
mysqladmin -u root -p extended-status | grep -E "Threads_|Connection"

# 监控连接数变化
watch -n 1 "mysqladmin -u root -p status | awk '/Threads:/ {print \$4}'"

3.2 pt-mysql-summary(Percona工具)

生成全面的服务器状态报告:

pt-mysql-summary --user root --password

输出内容

  • 连接数统计

  • 变量配置分析

  • 慢查询摘要

  • InnoDB状态关键指标

3.3 慢查询日志分析

定位消耗资源的查询:

-- 开启慢查询日志(临时生效)
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1; -- 设置阈值(秒)

-- 查看慢查询日志文件位置
SHOW VARIABLES LIKE 'slow_query_log_file';

分析工具

  • mysqldumpslow:官方工具,按时间/锁时间等排序

  • pt-query-digest:Percona工具,生成详细分析报告

3.4 连接数优化建议

  1. 调整线程缓存

    -- 计算最优thread_cache_size
    SELECT 
     (SELECT COUNT(*) FROM information_schema.PROCESSLIST 
      WHERE COMMAND='Sleep') AS sleeping_connections,
     (SELECT @@thread_cache_size) AS current_cache_size;

    建议值:thread_cache_size = (高峰连接数 - 活跃连接数)

  2. 控制连接数

    • 应用层使用连接池(如HikariCP、DBCP)

    • 设置合理的wait_timeout(默认8小时通常过长)

  3. 监控脚本示例

    #!/bin/bash
    MAX_CONNECTIONS=$(mysql -e "SHOW VARIABLES LIKE 'max_connections'" | awk 'NR>1 {print $2}')
    CURRENT_CONNECTIONS=$(mysql -e "SHOW STATUS LIKE 'Threads_connected'" | awk 'NR>1 {print $2}')
    if [ $CURRENT_CONNECTIONS -gt $(($MAX_CONNECTIONS * 0.8)) ]; then
      echo "WARNING: Connection usage at $(($CURRENT_CONNECTIONS*100/$MAX_CONNECTIONS))%" | mail -s "MySQL Connection Alert" admin@example.com
    fi

四、常见问题诊断

4.1 连接数达到上限

现象

ERROR 1040 (08004): Too many connections

解决方案

  1. 临时增加max_connections

    SET GLOBAL max_connections = 500;
  2. 永久修改配置文件:

    [mysqld]
    max_connections = 500
  3. 优化应用连接管理,减少长连接

4.2 连接泄漏

识别方法

SELECT 
  USER, 
  HOST, 
  COUNT(*) AS sleeping_connections 
FROM information_schema.PROCESSLIST 
WHERE COMMAND='Sleep' AND TIME > 3600 
GROUP BY USER, HOST;

处理建议

  • 检查应用是否正确关闭连接

  • 缩短wait_timeoutinteractive_timeout

  • 实现连接池健康检查

4.3 锁等待超时

错误示例

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

诊断步骤

  1. 使用SHOW PROCESSLIST定位阻塞查询

  2. 通过SHOW ENGINE INNODB STATUS查看详细锁信息

  3. 使用performance_schema分析锁等待链

五、总结与最佳实践

5.1 监控体系建议

监控层级 监控内容 工具/命令 频率
实时监控 当前活动连接SHOW PROCESSLIST 按需
短期监控 连接数变化趋势mysqladmin status + watch 1分钟
长期监控 状态变量历史数据 Prometheus + Grafana 5分钟
深度分析 锁等待/事务分析performance_schema 按需

5.2 日常检查清单

  1. 每日检查:

    • 异常连接(长时间运行的SLEEP连接)

    • 连接数是否接近上限

    • 错误日志中的连接相关错误

  2. 每周分析:

    • 慢查询日志

    • 连接数峰值时段分析

    • 用户连接模式变化

  3. 每月优化:

    • 调整连接相关参数

    • 清理无效账户

    • 更新监控阈值

5.3 性能优化口诀

  • 连接池要配置:合理设置大小和超时

  • 慢查询要关注:及时优化消耗资源SQL

  • 锁等待要警惕:避免长事务和全表扫描

  • 监控要全面:从连接数到锁状态全覆盖

通过系统掌握这些命令和监控方法,DBA可以构建起完善的MySQL连接监控体系,在问题发生前预警,在故障发生时快速定位,确保数据库服务的稳定高效运行。

mysql 用户 运行状态
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

香港稳定币立法落地:普通用户如何避坑抓红利?
嗨,我是老K。混币圈7年了。踩过冷钱包的坑。也帮粉丝解决过交易所注册难题。今天聊聊香港稳定币立法落地这事。政策刚定,很多人懵了。别慌,我用大白话拆解清楚。 政策核...
2026-04-02 新闻资讯
245

越南加密交易所试点将发放牌照:本土巨头抢滩,海外用户快搬家
嘿,大家好。我是老K。混币圈7年了。今天聊聊越南大动作。政府要发交易所牌照了。海外平台可能被禁。这事影响超大。我踩过冷钱包的坑。也经历过KYC被拒。必须给大家提个醒。...
2026-04-02 新闻资讯
214

菲律宾SEC点名5家加密交易所!用户资产安全拉响警报
嗨,大家好!我是老K,混迹币圈7年的老司机。最近菲律宾SEC搞了个大动作,直接点名5家加密交易所。这事闹得沸沸扬扬,不少粉丝私信问我:“老K,我的钱放里面安全吗?” 今...
2026-04-02 新闻资讯
134

英国加密货币用户将被罚款:新规生效,紧急避坑指南
英国加密新规今天正式开刀了。 你账户里的比特币、以太坊全被盯上了。 不配合?直接罚款起步。 这事真不是闹着玩的。 我混币圈七年,见过不少狠招。 但这次HMRC的动作太快太...
2026-04-02 新闻资讯
238

芝麻交易所大陆用户可以用吗?真相揭秘!
Gate.io大陆用户注册真相 最近好多粉丝私信问我。芝麻交易所就是Gate.io。大陆用户能用APP注册吗?答案是不能。权威资料明确说。芝麻APP大陆注册不是真的。我查过官网规则。...
2026-04-02 新闻资讯
235

美国法警署回应比特币持有:监管信号与普通用户指南
最近美国法警署(USMS)的动作又上热搜了。他们正式回应了信息请求。确认持有近2.9万枚比特币。具体数字是28988枚多。按当前价格算值16亿美元左右。这事是媒体通过信息自由...
2026-04-02 新闻资讯
160