更新到php5.3后无法连接mysql数据库

5

我刚把php更新到5.3,现在无法连接远程mysql服务器。出现了以下错误:

mysqli_connect(): OK packet 6 bytes shorter than expected
mysqli_connect(): (HY000/2000): mysqlnd cannot connect to MySQL 4.1+ using old authentication

看起来这与新的mysqlnd驱动程序有关。是否有一种方法强制使用旧的libmysql驱动程序?此外,回滚到php5.2.11似乎无法解决问题,这对大多数人有效。

3个回答

1

好的,我打了一个长长的酷回复,但是有人比我更好地回答了它。这个回复的tldr; 是为您的应用重新编译php。

http://news.php.net/php.internals/43535

Ionut G. Stan写道:

警告:mysql_connect() [function.mysql-connect]:在{filename}的第18行,OK数据包比预期短6个字节 警告:mysql_connect() [function.mysql-connect]:mysqlnd无法使用旧身份验证连接到MySQL 4.1+ 在{filename}的第18行

这就说了一切。您不能使用mysqlnd的旧身份验证。

将服务器密码升级为更近期和更安全的身份验证方法,或重新编译PHP以支持libmysql(MySQL客户端库)。检查./configure --help | grep -C3 mysql和http://www.php.net/manual/en/mysql.installation.php


0

http://dev.mysql.com/doc/refman/5.1/en/old-client.html中提到:

重置每个需要使用旧版客户端程序的用户的密码为pre-4.1风格。可以使用SET PASSWORD语句和OLD_PASSWORD()函数实现:

mysql> SET PASSWORD FOR -> 'some_user'@'some_host' = OLD_PASSWORD('newpwd'); 或者,使用UPDATE和FLUSH PRIVILEGES:

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd') -> WHERE Host = 'some_host' AND User = 'some_user'; mysql> FLUSH PRIVILEGES; 在上述示例中,“newpwd”是您想要使用的密码,请自行替换。MySQL无法告诉您原始密码是什么,所以您需要选择一个新密码。

让服务器使用旧的密码哈希算法:

使用--old-passwords选项启动mysqld。

这个页面上有很多其他选项...


我相信php语言/mysql_connect函数将在php5.3中停止支持OLD PASSWORD身份验证,这是我似乎正在处理的问题。服务器运行php5.2.11并使用旧的16字节密码加密,而客户端则期望新的41字节密码加密。当我尝试使用SET PASSWORD更改密码时,它仍然给我一个16字节的密码。 - giroy

0

请查看this

只需重置用户密码即可。

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('mypassword');

这给了我相同的16字节加密,而不是我想要的41字节加密。 - giroy
我在某个地方读到过有一个设置可以做到这一点,但是我没有找到它的运气。 - giroy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接