mysql -u 用户名 -p密码 -h 主机地址 -P 端口 数据库名
,回车后根据提示输入密码(若 -p
后未直接跟密码),成功连接后终端将显示 mysql>
提示符。什么是MySQL连接数据库?
MySQL连接数据库指应用程序与MySQL服务器建立的通信通道,当用户访问网站、APP或后台系统时,程序会通过连接与数据库交互数据,查询连接状态可监控资源使用、排查性能问题或检测异常访问。
通过SQL命令直接查询(推荐)
方法1:SHOW PROCESSLIST
在MySQL客户端执行:
SHOW FULL PROCESSLIST;
- 结果说明:
Id
:连接IDUser
:连接用户Host
:客户端IP和端口db
:访问的数据库名Command
:执行命令类型(如Query/Sleep)Time
:连接持续时间(秒)State
:当前状态Info
:执行的SQL语句
方法2:查询information_schema
系统表
SELECT * FROM information_schema.PROCESSLIST;
优势:可筛选特定条件(如过滤休眠连接):
SELECT * FROM information_schema.PROCESSLIST WHERE COMMAND != 'Sleep' AND TIME > 10;
通过命令行工具查询
方法1:mysqladmin
命令
mysqladmin -u用户名 -p密码 processlist
示例输出:
+----+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+----+---------+------+-------+------------------+
| 5 | root | localhost | db | Query | 0 | init | SHOW PROCESSLIST |
+----+------+-----------+----+---------+------+-------+------------------+
方法2:结合系统命令
查看MySQL端口(默认3306)的连接:
netstat -an | grep :3306
使用图形化管理工具
工具1:phpMyAdmin
- 登录后进入首页
- 点击顶部菜单 状态 → 进程列表
- 实时显示所有连接及执行的SQL
工具2:MySQL Workbench
- 连接数据库后,左侧导航栏点击 Management
- 选择 Client Connections
- 查看连接数、用户来源和活动状态
通过编程语言查询(示例)
Python示例
import pymysql # 建立管理连接 conn = pymysql.connect( host='localhost', user='admin', password='secure_pass', database='information_schema' ) cursor = conn.cursor() cursor.execute("SHOW PROCESSLIST") for row in cursor.fetchall(): print(f"ID:{row[0]} User:{row[1]} SQL:{row[7]}") cursor.close() conn.close()
PHP示例
<?php $conn = new mysqli("localhost", "admin", "secure_pass", "information_schema"); $result = $conn->query("SHOW FULL PROCESSLIST"); while ($row = $result->fetch_assoc()) { echo "ID: " . $row['Id'] . " | SQL: " . $row['Info'] . "<br>"; } $conn->close(); ?>
注意事项与最佳实践
-
权限控制:
- 仅允许管理员账号执行连接查询(普通账号无
PROCESS
权限) - 授权命令:
GRANT PROCESS ON *.* TO 'user'@'host';
- 仅允许管理员账号执行连接查询(普通账号无
-
性能影响:
- 避免高频查询(
SHOW PROCESSLIST
会短暂锁表) - 生产环境建议使用
information_schema
(非阻塞查询)
- 避免高频查询(
-
安全防护:
- 监控异常IP的长时间连接(如
TIME>300
) - 及时终止恶意连接:
KILL [连接ID];
- 监控异常IP的长时间连接(如
-
连接数优化:
- 检查
max_connections
配置:SHOW VARIABLES LIKE 'max_connections';
- 建议设置:
max_connections = 实际需求 + 20%冗余
- 检查
常见问题解决
Q1:查询结果为空或权限不足
- 检查账号是否有
PROCESS
权限 - 使用
sudo
运行命令(Linux系统)
Q2:连接数突然暴增
- 紧急终止所有非关键连接:
SELECT CONCAT('KILL ', id, ';') FROM information_schema.PROCESSLIST WHERE USER = '可疑用户' INTO OUTFILE '/tmp/kill.sql'; SOURCE /tmp/kill.sql;
- 检查程序是否未释放连接(如PHP未关闭
mysqli
)
Q3:大量Sleep
连接占用资源
- 修改
wait_timeout
(默认8小时):SET GLOBAL wait_timeout = 300; -- 5分钟无活动断开
引用说明:
本文方法基于MySQL 8.0官方文档,参考来源:
- MySQL SHOW PROCESSLIST Documentation
- information_schema.PROCESSLIST Table
操作建议遵循OWASP数据库安全指南。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/16152.html