一、认证协议问题分析
MySQL 4.1及以上版本启用了新的密码加密协议(caching_sha2_password),而早期PHP客户端(如mysql_connect模块)仍使用旧认证方式(mysql_native_password),导致出现“mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication”报错。该协议冲突常见于虚拟主机环境中的PHP与MySQL版本不匹配场景。
二、更新用户认证方式
通过phpMyAdmin执行以下SQL语句修改用户认证协议:
- 登录数据库管理面板,选择目标数据库
- 在SQL命令行输入:
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
- 刷新权限:
FLUSH PRIVILEGES;
三、配置MySQL服务端参数
修改MySQL配置文件(my.cnf或my.ini):
- 设置
default_authentication_plugin = mysql_native_password
- 注释或删除
bind-address = 127.0.0.1
,改为0.0.0.0
以允许远程连接
[mysqld] bind-address = 0.0.0.0 default_authentication_plugin = mysql_native_password
四、检查用户权限与防火墙
通过MySQL命令行执行权限验证:
- 查询用户权限:
SELECT host, user FROM mysql.user;
- 创建远程访问用户:
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%';
- 确认防火墙开放3306端口:
sudo ufw allow 3306/tcp
解决认证协议问题需要同时调整客户端认证方式和服务器端配置,建议优先采用新认证协议升级PHP扩展(如mysqli或PDO),若受限于环境版本可临时降级认证协议并配置对应权限。完成修改后需重启MySQL服务使配置生效。
本文由阿里云优惠网发布。发布者:编辑员。禁止采集与转载行为,违者必究。出处:https://aliyunyh.com/589731.html
其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。