Debian 10系统下如何查看连接MySQL 3306端口的IP地址
解决Debian 10系统下查询MySQL 3306端口真实连接IP的方法
可用查询方法
- 方法1:通过MySQL内置进程表查询(最准确,仅显示当前活跃/休眠连接)
需拥有MySQL管理员权限,执行如下命令:mysql -uroot -p -e "SELECT SUBSTRING_INDEX(host, ':', 1) AS client_ip FROM information_schema.processlist;"
输出结果中的client_ip字段即为连接MySQL的客户端IP,显示localhost为本地连接。 - 方法2:使用tcpdump实时抓包(适合捕获短连接)
针对测试脚本为短连接(连接后立刻断开,无法通过状态查询工具捕获)的场景,用root权限执行抓包命令:tcpdump -i any port 3306 -n
运行命令的同时启动测试脚本,捕获结果中的源IP即为连接MySQL的客户端地址。 - 方法3:使用ss命令查询TCP连接(替代netstat,效率更高)
直接执行命令查看当前所有3306端口的已建立连接:ss -ntu state established '( dport = :3306 or sport = :3306 )'
若需捕获瞬时短连接,可配合watch命令实时刷新:watch -n 0.5 ss -ntu state established '( dport = :3306 or sport = :3306 )' - 可选方法:开启MySQL通用查询日志(统计一段时间内所有连接IP)
编辑MySQL配置文件(默认路径为/etc/mysql/mariadb.conf.d/50-server.cnf),添加如下配置:
重启MySQL服务生效:general_log = 1 general_log_file = /var/log/mysql/mysql.logsystemctl restart mysql
后续可通过如下命令筛选所有连接记录:grep "Connect" /var/log/mysql/mysql.log
注意:使用完毕后需关闭通用日志,避免占用过多磁盘空间
原有工具查询无结果的原因
- nmap为端口扫描工具,仅能检测端口是否开放,无法查询已与服务器建立连接的客户端IP,本身不适用于该场景
- netstat仅能输出命令执行瞬间的TCP连接状态,若测试脚本使用短连接,会在两次命令执行间隙完成连接、查询、断开的流程,无法被捕获
- Debian 10默认预装的net-tools版本较老,部分场景下会出现连接信息遗漏的问题,推荐使用ss命令替代
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

