我正在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 );
}
答案 0 :(得分:6)
我不清楚为什么这会成为我的XAMPP安装上的一个问题,因为我还在服务器的本地机器上运行PHP 5.3.x并且没有遇到那些问题。但是,它与我在“旧密码”加密模式下运行的mySQL服务器有关。较新版本的PHP不允许这些类型的连接,因此您需要更新mySQL服务器以使用较新的密码加密。假设您可以控制mySQL服务器,以下是步骤。如果你不这样做,那就超出了我的知识范围。
找到名为my.cnf
的mysql服务器的配置文件。我在/etc/my.cnf
找到了我的。您可以使用sudo nano /etc/my.cnf
查找标有old_passwords=1
的行并将其更改为old_passwords=0
。您现在告诉服务器下次运行时,并要求使用PASSWORD()命令加密密码,它使用新的41个字符加密而不是16个字符的“旧”样式加密
现在你必须重启你的mysql服务器/服务。 YMMV,但在使用sudo service mysqld restart
轻松完成的Fedora上。检查操作系统的重启mysql守护程序或服务的说明
现在我们必须在mysql中编辑我们的user
表。所以打开一个交互式shell到mysql(在服务器上你可以输入mysql -uYourRootUsername -pYourRootPassword
)
更改为mysql
数据库。这是包含服务器操作和身份验证的所有好东西的数据库。您必须具有root访问权限才能使用此数据库。如果您获得“拒绝访问”,那么您就是SOL。抱歉。 use mysql;
将切换到该数据库
现在我们想要更新给你悲伤的用户。最终你可能想要更新所有用户,但是现在,我们只关注那些抛出错误的用户。 update user set Password=password('YOUR_PASSWORD') where User='YOUR_USERNAME';
现在,您只需要告诉mysql在该用户尝试连接时使用新密码进行身份验证。 flush privileges;
。
你应该好好去!