MySQL中统计各个IP的连接数

MySQL中统计各个IP的连接数

在MySQL中统计各个IP的连接数,可以使用以下几种方法:

方法1:查询 INFORMATION_SCHEMA.PROCESSLIST
sql 复制代码
SELECT 
    SUBSTRING_INDEX(host, ':', 1) AS client_ip,
    COUNT(*) AS connection_count
FROM information_schema.processlist 
WHERE host != ''
GROUP BY client_ip
ORDER BY connection_count DESC;
方法2:使用 SHOW PROCESSLIST 命令
sql 复制代码
-- 先创建临时表存储结果
CREATE TEMPORARY TABLE temp_processlist AS
SHOW PROCESSLIST;

-- 然后查询统计
SELECT 
    SUBSTRING_INDEX(host, ':', 1) AS client_ip,
    COUNT(*) AS connection_count
FROM temp_processlist
WHERE host != ''
GROUP BY client_ip
ORDER BY connection_count DESC;
方法3:更详细的连接信息统计
sql 复制代码
SELECT 
    SUBSTRING_INDEX(host, ':', 1) AS client_ip,
    COUNT(*) AS total_connections,
    SUM(CASE WHEN command = 'Sleep' THEN 1 ELSE 0 END) AS sleep_connections,
    SUM(CASE WHEN command != 'Sleep' THEN 1 ELSE 0 END) AS active_connections,
    GROUP_CONCAT(DISTINCT user) AS connected_users
FROM information_schema.processlist 
WHERE host != ''
GROUP BY client_ip
ORDER BY total_connections DESC;
方法4:实时监控脚本(Shell)
bash 复制代码
#!/bin/bash
# 保存为 monitor_connections.sh

mysql -u root -p -e "
SELECT 
    SUBSTRING_INDEX(host, ':', 1) AS '客户端IP',
    COUNT(*) AS '连接数',
    GROUP_CONCAT(DISTINCT USER) AS '用户列表'
FROM information_schema.processlist 
WHERE host != ''
GROUP BY SUBSTRING_INDEX(host, ':', 1)
ORDER BY COUNT(*) DESC;"
方法5:定期统计并记录到表
sql 复制代码
-- 创建统计记录表
CREATE TABLE IF NOT EXISTS connection_stats (
    id INT AUTO_INCREMENT PRIMARY KEY,
    stat_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    client_ip VARCHAR(45),
    connection_count INT,
    unique_users INT
);

-- 插入统计数据的存储过程
DELIMITER //
CREATE PROCEDURE log_connection_stats()
BEGIN
    INSERT INTO connection_stats (client_ip, connection_count, unique_users)
    SELECT 
        SUBSTRING_INDEX(host, ':', 1) AS client_ip,
        COUNT(*) AS connection_count,
        COUNT(DISTINCT user) AS unique_users
    FROM information_schema.processlist 
    WHERE host != ''
    GROUP BY SUBSTRING_INDEX(host, ':', 1);
END //
DELIMITER ;

-- 执行统计
CALL log_connection_stats();
方法6:查看当前连接详情
sql 复制代码
SELECT 
    ID as connection_id,
    USER as mysql_user,
    SUBSTRING_INDEX(host, ':', 1) AS client_ip,
    DB as database_name,
    COMMAND as command_type,
    TIME as time_seconds,
    STATE as connection_state,
    INFO as current_query
FROM information_schema.processlist 
WHERE host != ''
ORDER BY client_ip, TIME DESC;

实用技巧

1. 查找连接数过多的IP
sql 复制代码
SELECT 
    SUBSTRING_INDEX(host, ':', 1) AS client_ip,
    COUNT(*) AS connection_count
FROM information_schema.processlist 
WHERE host != ''
GROUP BY client_ip
HAVING connection_count > 10  -- 设置阈值
ORDER BY connection_count DESC;
2. 杀死特定IP的所有连接
sql 复制代码
-- 先生成kill语句预览
SELECT CONCAT('KILL ', ID, ';') AS kill_command
FROM information_schema.processlist 
WHERE SUBSTRING_INDEX(host, ':', 1) = '192.168.1.100';  -- 替换为目标IP

-- 确认无误后执行kill
相关推荐
znnnk4 小时前
数据库被AI“重写”:2026,从CPU中心走向GPU中心
数据库·人工智能·oracle
微微%4 小时前
mysql的安装和使用
数据库·mysql·mysql8安装
软件派6 小时前
MiniMax M3.1 Flash 高频业务落地实战指南
大数据·数据库·人工智能
云边云科技_云网融合6 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
泡海椒7 小时前
# 深度解析JQuick-SQL Join重排序与哈希连接执行机制
数据库·sql·哈希算法
acrel77 小时前
医院用电隐患治理与节能降耗及智慧能源平台应用
网络·数据库
snow@li7 小时前
PowerDesigner 全景教程:从业务建模、表结构设计、关系管理到正向/逆向、文档输出
数据库
ss2738 小时前
PostgreSQL表级锁、行级锁、轻量级锁
数据库·postgresql·区块链
RacentCLM8 小时前
证书即服务CaaS:从申请、续期到部署的自动化链路拆解
运维·数据库·自动化·ssl
SelectDB8 小时前
安全评审卡了三周,我把部署形态的四种选项重新排了一遍
大数据·数据库·云原生