MySQL 中查看数据库连接池信息和阻止特定连接
·
在 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 命令终止连接并配合权限控制来实现类似黑名单的效果。
更多推荐
所有评论(0)