我有一个专用服务器,已经设置并运行了一段时间,现在有以下内容。我们称这个服务器为1。
MySQL 5.0.95 PHP 5.2.17
使用此方法可以正常运行从PHP创建与数据库的连接:
mysql_connect($IPAddress,$DBUser,$DBPassword);
@mysql_select_db($database) or die( "Unable to select database");
现在我还有第二个专用服务器,让我们调用这个服务器2,它连接到上面服务器上的数据库,直到今天它工作正常。我所做的是将PHP更新到版本5.3.19,现在我收到的错误是:
无法连接:mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+。请使用管理工具使用命令SET PASSWORD = PASSWORD('your_existing_password')重置密码。这将在mysql.user中存储一个新的,更安全的哈希值。如果在PHP 5.2或更早版本执行的其他脚本中使用此用户,则可能需要从my.cnf文件中删除旧密码标志
我尝试过运行SET PASSWORD命令,但仍然无效。我也尝试将old-passwords标志设置为0,这也不起作用。
我错过了什么吗?一切都在服务器1上正常工作,它只是服务器2无效。
答案 0 :(得分:0)
删除或注释掉“my.cnf”文件中的以下行(例如/etc/my.cnf):
old_passwords = 1
这将阻止MySQL使用旧密码,现在我打赌如果你运行查询 - SELECT user, Length(Password) FROM mysql.user;
- 你会看到你的用户名可能有两个条目,一个16个字符和一个41个(41个)是您最近运行的查询SET PASSWORD
。)
删除/注释掉old_passwords
之后,您需要重新启动MySQL,否则它将继续使用old_passwords
MySQL重新启动后,您可能需要再次运行以下查询:
UPDATE mysql.user SET Password = PASSWORD('yourPassword!') WHERE user = 'yourUser';
&安培;
FLUSH Privileges;