最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何解决MySQL远程登录时DNS解析缓慢造成的权限验证延迟?
时间:2026-07-13 09:40:52 编辑:袖梨 来源:一聚教程网
MySQL远程登录卡在“Connecting to…”阶段,主因是服务端反向DNS解析阻塞;须在[mysqld]段配置skip-name-resolve=ON并重启,同时将mysql.user表中域名授权改为IP或%,否则报Access denied。
MySQL远程登录卡在“Connecting to…”阶段,基本就是服务端在做反向DNS解析(gethostbyaddr())被卡住,不是网络不通、不是密码错、也不是客户端问题——关掉skip-name-resolve就能解决,但必须同步改权限,否则连不上。
怎么确认真是DNS反查在拖慢连接?
别靠猜,用两个低成本方式快速验证:
- 临时停掉本机DNS服务:
sudo systemctl stop systemd-resolved,再执行mysql -h 192.168.1.50 -u app -p;如果秒进,基本锁定 - 换IPv6回环测试:
mysql -h ::1 -u root -p;若IPv4卡顿、IPv6立即响应,说明是IPv4反查阻塞 - 登录MySQL后执行
SELECT @@skip_name_resolve;,返回0表示未跳过解析 -
SHOW PROCESSLIST;里看到大量状态为Connecting的线程,且Host列显示IP(如10.0.2.15:52183)而非域名,就是典型信号
如何正确启用skip-name-resolve?
这个参数只对服务端生效,且只认[mysqld]段,写错位置或不重启等于没做:
- 编辑配置文件(Linux常见路径:
/etc/my.cnf、/etc/mysql/mysql.conf.d/mysqld.cnf;Windows是安装目录下的my.ini) - 在
[mysqld]段下添加:skip-name-resolve = ON - 必须重启服务:
sudo systemctl restart mysql(reload不生效) - 验证是否生效:
mysql -e "SHOW VARIABLES LIKE 'skip_name_resolve';"返回ON才算成功 - Ubuntu/Debian下可能被
!includedir /etc/mysql/conf.d/覆盖,先运行mysqld --verbose --help | grep "Default options"确认最终加载路径
开了skip-name-resolve为什么反而连不上?
因为MySQL彻底跳过DNS解析后,mysql.user表里的Host字段只能按字面匹配IP或%,所有带域名的授权全部失效:
- 典型报错:
Access denied for user 'app'@'192.168.1.100',但SELECT User, Host FROM mysql.user;显示的是'app'@'web01.example.com' - 本地用
localhost能连,换成127.0.0.1就拒绝——这是权限粒度变化的明确信号 - 修复步骤:
UPDATE mysql.user SET Host = '192.168.1.100' WHERE User = 'app' AND Host = 'web01.example.com'; FLUSH PRIVILEGES; - 批量检查问题账号:
SELECT User, Host FROM mysql.user WHERE Host NOT IN ('%', 'localhost', '127.0.0.1', '::1'); - Kubernetes等动态IP场景慎用:Pod IP频繁变化,硬写IP不可持续,得评估是否真能关反查
最易被忽略的点是:改完配置不重启、改错配置文件位置、或者只改了服务端却没动mysql.user表——三者任一缺失,都会让问题看起来“修了但没修好”。
相关文章
- 王者荣耀世界零氪玩家如何生存 07-28
- 快手极速版怎么绑定手机号 07-28
- 明日方舟和轻松小熊联动活动内容一览 07-28
- 逆战未来黎明之光 逆战未来黎明之光玩法机制与新手入门指南 07-28
- 植物大战僵尸融合版毁灭土豆地雷介绍 07-28
- 逆战未来飓风之龙 逆战未来飓风之龙武器获取方法详解 07-28