在 MySQL 中查看数据库连接池信息有以下几种方式:

1. 查看当前连接状态

-- 查看当前所有连接
SHOW PROCESSLIST;

-- 查看详细连接信息
SHOW FULL PROCESSLIST;

2. 查看连接相关状态变量

-- 查看连接数相关统计
SHOW STATUS LIKE 'Threads%';
SHOW STATUS LIKE 'Connections%';
SHOW STATUS LIKE 'Max_used_connections';

-- 关键指标说明:
-- Threads_connected: 当前连接数
-- Threads_running: 正在运行的线程数
-- Max_used_connections: 历史最大连接数
-- Connections: 总连接 attempts 数

3. 查看 MySQL 配置参数

-- 查看最大连接数配置
SHOW VARIABLES LIKE 'max_connections';

-- 查看连接超时配置
SHOW VARIABLES LIKE 'wait_timeout';
SHOW VARIABLES LIKE 'interactive_timeout';

4. 查看连接池使用情况(Performance Schema)

-- 启用 Performance Schema(需重启)
SET GLOBAL performance_schema = ON;

-- 查看连接事件
SELECT * FROM performance_schema.events_statements_summary_by_account_by_event_name 
WHERE EVENT_NAME = 'statement/sql/select';

5. 常用监控查询

-- 查看当前连接数排行
SELECT USER, HOST, COUNT(*) as connection_count 
FROM information_schema.PROCESSLIST 
GROUP BY USER, HOST 
ORDER BY connection_count DESC;

-- 查看阻塞的连接
SELECT * FROM information_schema.PROCESSLIST 
WHERE COMMAND = 'Sleep' AND TIME > 60;

在 MySQL 中,虽然没有直接的"黑名单"机制,但可以通过以下方式来阻止特定连接:

6. 杀掉指定连接并阻止重连

-- 首先查看连接列表,找到要阻止的连接ID
SHOW PROCESSLIST;

-- 杀掉指定连接
KILL <connection_id>;

-- 如果需要阻止用户重新连接,可以撤销其权限
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'host';
FLUSH PRIVILEGES;

7. 通过用户账户控制

-- 直接锁定用户账户
ALTER USER 'username'@'host' ACCOUNT LOCK;

-- 或者设置用户资源限制
GRANT USAGE ON *.* TO 'username'@'host'
WITH MAX_USER_CONNECTIONS 0;
FLUSH PRIVILEGES;

8. 网络层面阻止

在操作系统层面使用防火墙规则:

# Linux iptables 示例
iptables -A INPUT -s <client_ip> -p tcp --dport 3306 -j DROP

9. 创建临时阻止视图

-- 监控特定连接
SELECT * FROM information_schema.PROCESSLIST 
WHERE ID = <connection_id>;

-- 定期杀掉特定用户的所有连接
SELECT CONCAT('KILL ', ID, ';') AS kill_command
FROM information_schema.PROCESSLIST 
WHERE USER = 'blocked_user';

这些方法可以根据具体需求选择使用,最常用的是通过 KILL 命令终止连接并配合权限控制来实现类似黑名单的效果。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐