远程mySQL连接从XAMPP抛出“无法使用旧的不安全身份验证连接到MySQL 4.1+”错误

时间:2011-12-12 22:11:25

标签: mysql xampp remote-access

我正在XAMPP / WinXP上运行WordPress的本地副本以进行开发,但是希望保持与远程数据库的连接。无论我尝试什么,我都会收到“建立数据库连接错误”。

在同一台PC上,我可以使用任意数量的mySQL客户端连接到远程mySQL数据库,而在mySQL端,用户和数据库都设置为接受来自任何通配符域的传入请求。我也可以从我的PC上轻松ping远程数据库服务器(虽然我不知道如何从WITHIN XAMPP中执行此操作)。

XAMPP是否是一个无法通过外部世界进入的小宇宙?或者有什么我可以清楚地忽略那些不让我联系的东西吗?

错误

Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:553) in C:\xampp\htdocs\dbtest.php on line 5 
Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in C:\xampp\htdocs\dbtest.php on line 5 
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication

修改

感谢@Michael建议我创建一个简单的连接脚本,以便更好地了解被抛出的实际错误。这表明它与mySQL中的old_password设置有关。有关如何解决此问题的完整说明,请参阅下面的答案。

这是我放在xampp\htdocs文件夹中并测试出来的测试脚本:

<?php

$mysqli = new mysqli('my.server.address', 'user_name', 'password', 'database_name');

if ($mysqli->connect_error){
    die ("Connect error: " . $mysqli->connect_error );
}

1 个答案:

答案 0 :(得分:6)

我不清楚为什么这会成为我的XAMPP安装上的一个问题,因为我还在服务器的本地机器上运行PHP 5.3.x并且没有遇到那些问题。但是,它与我在“旧密码”加密模式下运行的mySQL服务器有关。较新版本的PHP不允许这些类型的连接,因此您需要更新mySQL服务器以使用较新的密码加密。假设您可以控制mySQL服务器,以下是步骤。如果你不这样做,那就超出了我的知识范围。

  1. 找到名为my.cnf的mysql服务器的配置文件。我在/etc/my.cnf找到了我的。您可以使用sudo nano /etc/my.cnf

  2. 进行修改
  3. 查找标有old_passwords=1的行并将其更改为old_passwords=0。您现在告诉服务器下次运行时,并要求使用PASSWORD()命令加密密码,它使用新的41个字符加密而不是16个字符的“旧”样式加密

  4. 现在你必须重启你的mysql服务器/服务。 YMMV,但在使用sudo service mysqld restart轻松完成的Fedora上。检查操作系统的重启mysql守护程序或服务的说明

  5. 现在我们必须在mysql中编辑我们的user表。所以打开一个交互式shell到mysql(在服务器上你可以输入mysql -uYourRootUsername -pYourRootPassword

  6. 更改为mysql数据库。这是包含服务器操作和身份验证的所有好东西的数据库。您必须具有root访问权限才能使用此数据库。如果您获得“拒绝访问”,那么您就是SOL。抱歉。 use mysql;将切换到该数据库

  7. 现在我们想要更新给你悲伤的用户。最终你可能想要更新所有用户,但是现在,我们只关注那些抛出错误的用户。 update user set Password=password('YOUR_PASSWORD') where User='YOUR_USERNAME';

  8. 现在,您只需要告诉mysql在该用户尝试连接时使用新密码进行身份验证。 flush privileges;

  9. 你应该好好去!