我的服务器无法连接到mysql

时间:2016-07-13 14:22:06

标签: php mysql

我有服务器x用于游戏服务器。 我有mysql5.5。 当我将服务器连接到数据库时,我收到了此消息

  

客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端

my.ini设置为old_passwords = 1

mysql> SHOW VARIABLES like 'old_passwords';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| old_passwords | 1     |
+---------------+-------+
1 row in set

当我尝试使用mysql 4.0.27-nt-max时,它可以成功连接。 但我不能用php连接db mysql 4.0.27-nt-max

2 个答案:

答案 0 :(得分:1)

如果你还有一个MySQL 4.0的副本,我猜你也有一个古老版本的PHP。

https://support.zend.com/hc/en-us/articles/203838366-mysql-connect-Client-does-not-support-authentication-protocol

  

许多较旧的PHP版本使用MySQL 3.23.x的MySQL客户端API。如果您使用较旧的PHP版本(使用旧的MySQL API),则在尝试连接到MySQL服务器4.1.x或更高版本时,客户端将不支持身份验证协议错误。

     

推荐的解决方案是将PHP升级到最新版本......

答案 1 :(得分:0)

要解决此问题,首选解决方案是升级所有客户端程序以使用4.1.1或更高版本的客户端库。如果无法做到这一点,请使用以下方法之一:

要使用4.1之前的客户端程序连接到服务器,请使用仍具有4.1之前密码的帐户。

为需要使用4.1之前的客户端程序的每个用户重置密码为4.1之前的样式。这可以使用SET PASSWORD语句和OLD_PASSWORD()函数来完成:

mysql> SET PASSWORD FOR
    -> 'some_user'@'some_host' = OLD_PASSWORD('new_password');

在前面的示例中替换您要用于“new_password”的密码。 MySQL无法告诉您原始密码是什么,因此您需要选择一个新密码。

默认情况下,告诉服务器使用旧的密码哈希算法:

启动mysqld,将old_passwords系统变量设置为1。

为每个已将密码更新为4.1格式的帐户分配旧格式密码。您可以使用以下查询识别这些帐户:

mysql> SELECT Host, User, Password FROM mysql.user
    -> WHERE LENGTH(Password) > 16;

对于查询显示的每个帐户记录,请使用“主机”和“用户”值,并使用前面介绍的方法之一指定密码。