【问题标题】:Android Development - allow any host to connect to MySQLAndroid 开发 - 允许任何主机连接到 MySQL
【发布时间】:2012-11-12 06:32:21
【问题描述】:

我正在尝试从一个基本的 Android 应用程序远程连接到我的 MySQL 服务器。 我可以使用'localhost'很好地连接到服务器,但我也希望任何主机连接到服务器(为了简单起见,暂时)。

我的 phpMyAdmin 中有以下两个用户:

User    Host       Password  Global privileges  Grant
root    %           Yes      ALL PRIVILEGES      Yes    
root    localhost   Yes      ALL PRIVILEGES      Yes

我连接到数据库的变量是:

/*
* All database connection variables
*/

define('DB_USER', "root"); // db user
define('DB_PASSWORD', "myPass"); // db password (mention your db password here)
define('DB_DATABASE', "mainData"); // database name
define('DB_SERVER', ''); // db server
?>

我还编辑了 my.cnf,我正在使用 MAMP PRO。我修改了这一行:

bind-address = 0.0.0.0

我还取消选中了 MAMP PRO 中的“仅允许本地访问”选项。

我重新启动了服务器,但我仍然无法从非 localhost 的主机连接。我在几部手机上安装了 android 应用程序,但我只能连接到 localhost 上的数据库。

我浏览了论坛并找不到不同的解决方案。任何帮助或建议将不胜感激。

【问题讨论】:

  • 也许您的服务器有防火墙阻止外部连接?

标签: android mysql connect mamp host


【解决方案1】:

最简单的检查防火墙是否阻止与数据库服务器的连接是。使用工作站并尝试使用 telnet 到端口 3306。这至少会告诉您问题存在于哪里,在应用程序或网络中。

在 MAMP 服务器上检查的另一件事是端口实际上是否在 0.0.0.0:3306 或 127.0.0.1:3306 上打开

试试netstat -an | find "3306"

【讨论】:

  • netstat 给我:tcp4 0 0 .3306 *. LISTEN
  • 你尝试过 telnet ipaddress 3306 吗?
  • telnet 返回:已连接到 new-host.home。转义字符是 '^]'。 J 5.5.25W'Wbg`*?2J]tR|
  • MySQL 服务器工作正常,网络似乎没有问题。问题很可能发生在 android 代码中。在您连接的 android 代码中,您可以放置​​一个 try catch,然后记录异常(如果有的话)并将 logcat 日志粘贴到此处。如果可能的话,在这里提供一些你的 android 代码。
  • 还要补充一点,您是否已将您的数据库访问权限设置为远程 ip(android 的 ip)。因为每次连接到 3G 或 Wifi 时手机 ip 都会改变(除非设置了静态 ip)。你可能想让你的数据库访问远程 ip,mysql> GRANT ALL ON foo.* TO dbuser@'%' IDENTIFIED BY 'PASSWORD';
【解决方案2】:

如何调用 PHP 并让该脚本访问 MySQL,而不是客户端访问端口 3306?

【讨论】:

  • 这正是我正在做的,我检查了端口 3306 是否已打开并正在侦听,但仍然没有成功。
  • 我建议 Android 用户在端口 80 上连接到您的 Web 服务器以发送请求。然后服务器具有与 localhost:3306 对话的 php 脚本,获取数据、编码并在端口 80(或 443)上发送回。我不认为我们在说同样的话。您的 Android 手机不应该通过无线方式与 3306 通话。
  • 需要明确的是,只有位于端口 80/443 上的网络服务器(PHP、Python 等)在 DMZ 中并且可以通过电话访问。您的 MySql/MSSQL 服务器受防火墙保护,无法从 Internet 访问。如果您有一台既是网络服务器又是数据库服务器的服务器,则同样适用。数据库端口对外界关闭。
  • 我目前正在使用 JSON 解析器通过使用端口 8888、Web 服务器 (PHP) 发出 HttpRequest 向 Web 服务器发送请求,然后使用 localhost:3306 与 MySql DB 交互。我应该切换到80端口吗?
  • 我愿意,因为您可以依靠 80 和 443 来从网吧、学校和公共图书馆等许多端口关闭的地方开放。
猜你喜欢
  • 2013-03-31
  • 2013-10-09
  • 2012-11-12
  • 2020-08-06
  • 2017-10-09
  • 2012-06-07
  • 2011-02-26
相关资源
最近更新 更多