【问题标题】:Connecting From PHP Server to MySQL Server on Amazon AWS从 PHP 服务器连接到 Amazon AWS 上的 MySQL 服务器
【发布时间】:2012-08-19 19:00:09
【问题描述】:

我在 Amazon AWS 上设置了两台服务器。一台服务器运行 PHP,另一台运行 MySQL。我可以通过终端和 MySQL Query Browser 连接到 MySQL 数据库。

我正在尝试在 PHP 和 MySQL 服务器之间建立连接。

这是我正在使用的 PHP 代码(适用于“localhost”数据库)

$dbbase = 'mydb';               
$dbuser = 'myuser';         // Your MySQL username
$dbpass = 'mypassword';     // ...and password
$dbhost = 'localhost:3306';  // Internal IP for MYSQL Server

// connect to database
$dblink = mysql_connect($dbhost, $dbuser, $dbpass) 
    or die ("System Down");

mysql_select_db($dbbase, $dblink) 
    or die ("Database Down");

据我了解,我应该能够路由此内部 AWS 流量,但此时我将采用任何可行的方法并从那里构建。

这是我所做的:

  • 将 PHP 服务器的 ip 添加到 MySQL(3306) 权限的安全组中

  • 尝试使用 MySQL 服务器的内部、外部和私有 IP/DNS 作为 $dbhost 变量

  • 在你的 MySQL 服务器上创建了 myuser@%(通配符)

任何想法或提示将不胜感激。

【问题讨论】:

  • 3306上的PHP机器能打到mysql机器吗?试试这个命令:telnet <mysql_host_external_IP> 3306。看看它是否有效。
  • 当我执行“远程登录”时,它显示“找不到命令”。我尝试了“ping”,但它只是坐在那里,直到超时什么都没有发生。
  • 我在安全组中打开了 ICMP,现在我可以从 PHP 服务器 ping MySQL 服务器了。

标签: php mysql amazon-web-services connection internal


【解决方案1】:

我遇到了同样的问题 - 原来 PHP 的 MySQL 扩展不再包含在 PHP5 中!

“在 PHP 5(更新的 PHP 5.0.4)中,存在以下更改。内置:DOM、LibXML、Iconv、SimpleXML、SPL 和 SQLite。并且不再内置:MySQL 和 Overload。”

来源:http://php.net/manual/en/install.windows.extensions.php

【讨论】:

    【解决方案2】:

    我已经搞定了。

    我认为最大的窍门是将此规则添加到安全组:

    类型:MySQL

    来源:10.0.0.0/8

    我的理解是 10.0.0.0/8 涵盖了所有内部亚马逊 IP。我认为您可以加强这一点,但您的服务器的内部 IP 可能会发生变化,因此需要对其进行管理。

    然后在我的 PHP 脚本中,我使用了我的 MySQL 服务器的私有 DNS。它应该看起来像这样:ip-10-10-100-100.ec2.internal:3306

    最后,我认为这就是我所做的一切。

    【讨论】:

    • 最好将安全组用于内部 AWS 到 AWS 规则。如果你有一个 MySQL 安全组和一个 PHP 安全组,那么 MySQL 安全组应该在 3306 上接受来自 PHP 组的入站流量。
    猜你喜欢
    • 2012-06-08
    • 2012-04-03
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多