今天将MySQL5.7升级到MySQL8.0后,突然眼前一片黑暗:所有Web服务都提示连不上数据库,通过Navicat连接倒是正常。
百度了半小时,毛线结果都没有,我也是有毛病,明知百度从来就没解决过我的问题。突然想起曾经写过一篇MySQL5.7离线安装方法,里面捎带着一点MySQL8.0的知识,才想起MySQL8.0针对账户安全引入了新的身份验证插件。
MySQL8默认的验证方法是caching_sha2_password(如下图),而PHP7的mysqlnd只支持mysql_native_password,因此,解决方法有二。
方法一 创建/修改用户时,指定用户身份验证方案,如:
# 创建用户 CREATE USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword@123'; # 修改密码 ALTER USER 'user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword@123'; FLUSH PRIVILEGES;
方法二 修改配置文件,更改默认的身份验证插件,如:
[mysqld] default_authentication_plugin = mysql_native_password
# 重启mysql systemctl restart mysqld # 因此前多次连接失败,很可能会被锁IP,通过以下命令解锁 mysqladmin -uroot -p flush-hosts
原创文章禁止转载:技术学堂 » 升级至MySQL8.0后,Web应用连接不上数据库的解决方法