我正在尝试连接到托管在 000webhost 上的数据库。我从 SmartFoxServer 进行连接,它们允许数据库连接。您所要做的就是更改 smartfoxserver xml 文件中的某些设置。
我已成功使用这些设置连接到我的本地主机 mysql 数据库。
<databaseManager active="true">
<connectionString>jdbc:mysql://localhost:3306/db_name</connectionString>
<userName>root</userName>
<password></password>
<testSql>SELECT id FROM users LIMIT 1</testSql>
</databaseManager>
但是当我尝试连接到托管在 000webhost 上的外部数据库时,如下所示:
使用这些设置
<connectionString>jdbc:mysql://mysql2.000webhost.com/a5939459_data</connectionString>
<userName>a5939459_user</userName>
<password>censored</password>
<testSql>SELECT id FROM users LIMIT 1</testSql>
我收到以下错误...
Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
Message: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driv
er has not received any packets from the server.
Description: The DBManager Test SQL failed
Please double check your SQL code and make sure that Database server is running.
编辑:
但是当我在本地主机上运行 php 文件并像这样请求数据库连接时,它可以工作
<?php
$db_username = "a5939459_user";
$db_name = "a5939459_data";
$db_password = "censored";
$db_host = "mysql2.000webhost.com";
mysql_connect($db_host,$db_username, $db_password, $db_name);
mysql_select_db($db_name) or die (mysql_error());
?>
答案1
打开数据库/mysql 端口用于外部/Internet 连接是一个很大的安全问题。因此,当他们创建您的数据库时,他们很可能会指定一个用户仅从有限的源 IP(主要是内部 IP)进行连接。您需要与他们的支持人员沟通,以获取允许您从哪些源 IP 进行连接的信息。正如 John 提到的,mysql2.000webhost.com 解析为私有 IP 地址,这意味着您很可能被允许从其他私有 IP 连接到它,您可以通过 VPN 或其他方式连接到该 IP。
mysql2.000webhost.com. 14189 IN A 10.1.1.102
答案2
他们给您的 MySQL 主机有一个 10. IP 地址,在互联网上无法路由。您只能从他们提供的 Web 主机连接到该主机,而不能从其他主机连接到该主机。
答案3
正如其他人所指出的,问题确实是 000webhost 不允许远程连接到 mysql 数据库。
http://www.freesqldatabase.com/
最终我将其用于我的 mysql 数据库。它是免费的。它实际上非常可靠且快速。允许免费远程连接。有 phpMyAdmin。
虽然不确定其安全性,但除此之外,这是一个很好的选择。