【问题标题】:How do I do MySQL queries on an RDS instance from an EC2 instance?如何从 EC2 实例对 RDS 实例执行 MySQL 查询?
【发布时间】:2016-02-13 20:30:04
【问题描述】:

我一直在尝试建立一个系统,其中我的数据库将位于 AWS RDS 实例中,而我的程序将位于 EC2 实例中(看起来非常简单)

由于某种原因,here 的结果非常无用。

为了澄清,我正在寻找一些示例代码来连接到数据库并运行 mysql 查询。到目前为止,尽管指定了 rds url,但我的每一次尝试都以我的程序尝试连接我的 ec2 实例上的 localhost mysql 结束。

这是我的脚本,

<?php
$servername = "maindb.gibberish.us-east-1.rds.amazonaws.com";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (mysqli_error($conn)) {
    die("Connection failed: " . mysqli_error($conn));
}else{
        echo "connected successfully";    
}
?>

【问题讨论】:

  • 显示您的数据库连接代码,以便我们查看您做错了什么。顺便说一句,这是非常标准的东西,如果您在 Google 上搜索“PHP 连接到远程 MySQL 数据库”之类的内容,您应该能够找到数千个示例。
  • 是的,我做到了。问题似乎实际上是在查询数据库。我可以在 CLI 中正常连接,但不能通过 php 脚本连接。
  • 请出示您的代码
  • 您的主机名是否正确?您是否为 RDS 提供了正确的安全组规则?默认情况下,AWS 会阻止所有传入连接。 mysql端口是3306。

标签: php mysql amazon-web-services amazon-ec2 amazon-rds


【解决方案1】:

您可以使用我的answer to this question 中的代码,这也解释了每行代码的作用。您可以在 $servername 变量中输入您的 amazon RDS endpoint。并在 $sql 变量中更改您的查询。

在确保您的 RDS 可以被您的 EC2 服务器联系方面。您需要确保正确设置安全组以允许来自您的服务器的连接。像这样:

1.在您的 EC2 管理控制台中,从左侧导航中选择“安全组”。

2。为您的 RDS 服务器选择安全组。 注意如果您在设置时没有将其命名为特定的名称,则该名称可能看起来像 rds-launch-wizard created xxxxxxx

点击编辑按钮。那里的 IP 地址很可能就是您正在使用的 IP 地址。 (或者您在设置服务器时使用的那个)。您需要将其更改为 ANY,或者只是您的 EC2 服务器的公共 IP 地址。

编辑:查看您的代码后,我认为您正在错误地测试连接。

<?php
$servername = "maindb.gibberish.us-east-1.rds.amazonaws.com";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {

    die("Connection failed: " . mysqli_error($conn));

}else{
        echo "connected successfully";

}


?>

【讨论】:

  • 感谢 Adam,我在链接中尝试了您的解决方案,但正如我所提到的,我并没有尝试连接到我的本地主机。我用 maindb.gibberish.us-east-1.rds.amazonaws.com 替换了 servername 并适当地更改了用户名和密码,但除了 PHP 警告:mysqli_connect(): (HY000/2002):第 7 行的 /var/www/serverfunctions/test_mysqli.php 中的连接超时 PHP 警告:mysqli_error() 期望参数 1 为 mysqli,布尔值在第 10 行的 /var/www/serverfunctions/test_mysqli.php 中给出,我相信这表明连接尝试失败。
  • 完成。如果您有任何想法,请告诉我:L
  • 您是否查看过我关于亚马逊安全组设置的指南?再次检查我在另一个答案中的示例代码后,看来您没有连接是正确的。这表明您的亚马逊 RDS 服务器不可访问。所以你应该检查安全组设置。
  • 安全组允许从所有 IP 连接到端口 3306。我唯一不确定的是如何指定要连接的端口。
  • 默认连接3306端口
猜你喜欢
  • 2019-04-03
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 2013-10-08
相关资源
最近更新 更多