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

Laravel应用中MySQL 8每隔5个月出现root本地访问拒绝问题咨询

问题分析与解决建议

核心原因:大概率是密码过期导致

MySQL 8 默认的密码过期策略是180天(约5个月),刚好和你遇到的复发周期吻合。当密码过期后,即使用户输入正确密码也会触发Access denied错误,而你执行的重置命令相当于重新设置了密码并刷新了过期状态,所以能暂时解决问题。

验证方法

登录MySQL后执行以下命令,查看root@localhost用户的密码过期相关状态:

SELECT user, host, password_expired, password_lifetime FROM mysql.user WHERE user = 'root' AND host = 'localhost';
  • 如果password_expired值为Y,说明密码确实已过期;
  • password_lifetime值若为180,则是使用了默认的过期周期。

永久解决方法

方法1:单独设置该用户密码永不过期

执行以下SQL命令(替换your_password为实际密码):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES;

方法2:修改全局密码过期策略(影响所有用户)

  1. 打开MySQL配置文件(Linux通常是/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf,Windows是my.ini);
  2. 在[mysqld]段添加或修改:
    default_password_lifetime = 0  # 0表示永不过期,也可设置具体天数如365
    
  3. 重启MySQL服务:
    sudo systemctl restart mysql  # Linux
    # Windows可通过服务管理器重启MySQL服务
    

其他排查方向

如果确认不是密码过期问题,还需检查以下两点:

  • Laravel配置是否被篡改:检查.env文件中的DB_PASSWORD是否与MySQL中root用户的密码一致,避免配置文件被意外修改;
  • 认证插件是否被重置:MySQL 8 默认使用caching_sha2_password插件,部分场景(如MySQL升级、配置重置)可能会将用户的认证插件改回默认值。执行以下命令确认插件类型:
    SELECT user, host, plugin FROM mysql.user WHERE user = 'root' AND host = 'localhost';
    
    确保plugin值为mysql_native_password,如果不是,重新执行你之前的重置命令即可。

内容的提问来源于stack exchange,提问作者ZayR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:22:39