You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL "Access denied" 错误排查及权限配置问题求助

MySQL "Access denied" 错误排查及权限配置问题求助

遇到这种明明配置了权限却还是连不上的情况真的很闹心,我之前处理过不少类似的MySQL权限问题,咱们一步步来排查:

1. 先确认权限条目是否真的生效了

有时候我们以为执行了GRANT就没问题,但可能实际的权限条目和我们想的不一样。登录到MySQL服务器上,执行这条命令看看user2的权限记录:

SELECT user, host, authentication_string FROM mysql.user WHERE user = 'user2';

重点看host列是不是和你授权的machine4.localdomain完全一致——MySQL的权限是用户+主机的组合,哪怕差一个字符都不行。比如如果服务器识别到的是machine4(短主机名)或者直接是IP,那machine4.localdomain的权限就不生效。

2. 查看MySQL错误日志找真相

MySQL的错误日志会记录拒绝连接的具体细节,比客户端的报错信息有用多了。先找到日志位置:

SHOW VARIABLES LIKE 'log_error';

打开对应的日志文件,找最近的Access denied相关记录,你会看到类似这样的内容:

Access denied for user 'user2'@'192.168.1.104' (using password: YES)
这就说明服务器实际识别到的客户端主机是192.168.1.104而不是machine4.localdomain,这时候你之前给的hostname权限自然没用,得换成这个IP来授权。

3. 检查skip-name-resolve配置

如果MySQL开启了skip-name-resolve,它就不会解析客户端的hostname,只会用IP地址来匹配权限。执行这条命令看看:

SHOW VARIABLES LIKE 'skip_name_resolve';

如果结果是ON,那你用machine4.localdomain授权肯定没用,必须换成客户端的实际IP,或者用%(不推荐,不安全)来授权。

4. 确认GRANT语句是否包含密码

如果user2在machine4.localdomain这个主机下还没设置密码,或者密码和你客户端输入的不匹配,也会报这个错。重新执行授权语句的时候记得加上密码(如果需要的话):

GRANT ALL PRIVILEGES ON *.* TO 'user2'@'正确的主机名或IP' IDENTIFIED BY '你的密码';
FLUSH PRIVILEGES;

这里的FLUSH PRIVILEGES一定要执行,确保权限立即生效。

5. 排除网络和防火墙问题

虽然你的报错是权限问题,但还是要确认一下网络是否通畅:在machine4上用nc或者telnet测试MySQL服务器的3306端口是否能通:

nc -zv 你的MySQL服务器IP 3306

如果不通,那先解决网络问题(比如Mac的防火墙有没有放行3306,或者路由器的端口转发问题);如果能通,再回到权限排查。

6. 检查MySQL的bind-address配置

有时候MySQL只绑定了127.0.0.1,导致局域网其他机器连不上。执行这条命令看看:

SHOW VARIABLES LIKE 'bind_address';

如果结果是127.0.0.1,那只有本地能连,你需要修改my.cnf(Mac上可能在/etc/my.cnf或者/usr/local/mysql/my.cnf),把bind-address改成0.0.0.0(允许所有IP访问)或者你的局域网IP,然后重启MySQL服务。

按照这些步骤排查下来,应该能找到问题所在。我之前碰到过好几次都是因为服务器识别的客户端主机和我授权的不一样,看错误日志一下子就找到了原因。

备注:内容来源于stack exchange,提问作者Mike Levin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:53:12