我得到以下错误:

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

这将在mysql.user中存储一个新的、更安全的哈希值.如果这是 用户在由PHP 5.2或更早版本执行的其他脚本中使用,您可以 需要从my.cnf文件中删除旧密码标志

我在本地机器上使用PHP5.3.8和MySQL 5.5.16,我的主机(media temple)运行PHP5.3 MySQL 5.0.51a.live server上的版本比我机器上的版本旧.

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

我知道有类似的帖子,但我都试过了,都不管用.

推荐答案

  • 删除或注释my.cnf中的old_password=1

重启MySQL.如果不这样做,MySQL将继续使用旧的密码格式,这意味着您无法使用内置的password()哈希函数升级密码.

旧密码散列为16个字符,新密码为41个字符.

  • 连接到数据库,然后运行以下查询:

    SELECT user, Length(`Password`) FROM  `mysql`.`user`;
    

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

+----------+--------------------+
| user     | Length(`Password`) |
+----------+--------------------+
| root     |                 41 |
| root     |                 16 |
| user2    |                 16 |
| user2    |                 16 |
+----------+--------------------+

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

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

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

最后,刷新权限:

FLUSH PRIVILEGES;

来源:How to fix "mysqlnd cannot connect to MySQL 4.1+ using old authentication" on PHP5.3

Database相关问答推荐

Golang Gorm和Gin无法创建具有关联的对象

如果我想支持我的工作负载,我需要多少个 node ?

我们可以在 CnosDB 中的单个数据库中创建的标签数量是否有限制?

如何在 C# 控制台应用程序中执行 CMD 命令?

我应该为 Realm 中的每个实体定义主键吗?

Symfony2:spl_object_hash() expects parameter 1 to be object, string given in Doctrine

PostgreSQL 将列从整数转换为文本

按请求的可变事务隔离级别

如何在 SQL Server 中生成随机数据?

SQLite 如果列存在

如何在sqlite数据库中添加日期

什么是本体数据库?

Redis: Get key and value on expiration

如何在 DynamoDB 中创建 UUID?

从 CSV 文件填充 Android 数据库?

Fluent NHibernate 的类映射生成器

使用默认路径中的文件创建数据库

如何在 SQL Server 中创建数据库的别名

归一化 - 2NF 与 3NF

Guice、JDBC 和管理数据库连接