一尘不染

错误:mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+

mysql

我收到以下错误:

数据库连接失败:mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+。请使用管理工具通过命令重置密码SET PASSWORD = PASSWORD('your_existing_password')

这将在中存储一个新的,更安全的哈希值mysql.user。如果此用户在PHP
5.2或更早版本执行的其他脚本中使用,则可能需要从my.cnf文件中删除old-passwords标志

我在本地计算机上使用PHP 5.3.8和MySQL 5.5.16,并且我的主机(媒体寺庙)正在运行PHP 5.3 MySQL
5.0.51a。实时服务器上的版本比我计算机上的版本旧。

如何解决此错误并从本地计算机连接到MySQL?

我知道也有与此类似的帖子,但是我已经尝试了所有帖子,但都没有工作。


阅读 408

收藏
2020-05-17

共1个答案

一尘不染

  • 在my.cnf中删除或评论old_passwords = 1

重新启动MySQL。如果不这样做,MySQL将继续使用旧的密码格式,这意味着您无法使用内置的PASSWORD()散列函数来升级密码。

旧密码哈希值为16个字符,新密码哈希值为41个字符。

  • 连接到数据库,并运行以下查询:
    SELECT user, Length(`Password`) FROM  `mysql`.`user`;
    

这将向您显示哪些密码是旧格式,例如:

+ ---------- + -------------------- +
| 用户| 长度(`密码`)|
+ ---------- + -------------------- +
| 根| 41 |
| 根| 16 |
| user2 | 16 |
| user2 | 16 |
+ ---------- + -------------------- +

请注意,每个用户可以有多行(每个不同的主机规范对应一行)。

要更新每个用户的密码,请运行以下命令:

UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username';

最后,刷新特权:

FLUSH PRIVILEGES;

来源:如何在PHP5.3上修复“ mysqlnd无法使用旧认证连接到MySQL
4.1+”

2020-05-17