我有服务器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
答案 0 :(得分:1)
如果你还有一个MySQL 4.0的副本,我猜你也有一个古老版本的PHP。
许多较旧的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;
对于查询显示的每个帐户记录,请使用“主机”和“用户”值,并使用前面介绍的方法之一指定密码。