【问题标题】:Slow connection from EC2 to RDS while the local connection to RDS is fine从 EC2 到 RDS 的连接速度很慢,而到 RDS 的本地连接很好
【发布时间】:2023-03-15 16:23:01
【问题描述】:

我有一个使用 EC2 和 RDS 的 AWS 账户。它们都在同一个 VPC 上。 我通过 Elastic Beanstalk 进行设置。
他们都有共享的安全组,我可以从我的 EC2 实例 (PHP) 成功连接到我的 RDS (MySQL)。但是,它非常慢(90 秒)。

如果我从家里的 MySQL 工作台或什至通过我的本地主机进行连接,它非常好且响应迅速(237 毫秒)。

我不知道还要检查或更改什么才能让 EC2 和 RDS 快速运行。

如果有人想知道,这是我用来测试连接时间的代码:

echo date('H:i:s').PHP_EOL;
$host = $_ENV["RDS_HOSTNAME"];
$user = $_ENV["RDS_USERNAME"];
$pass = $_ENV["RDS_PASSWORD"];
$db = $_ENV["RDS_DB_NAME"];
echo "Environment variables set: ".date('H:i:s').PHP_EOL;
try{
    $con = mysqli_connect($host, $user, $pass, $db);
    echo "First Complete: ".date('H:i:s').PHP_EOL;
    mysqli_select_db($con, $_ENV["RDS_DB_NAME"]);
    echo "Second Complete: ".date('H:i:s').PHP_EOL;
}catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    print_r(mysqli_connect_error());
}

感谢您的任何建议!

【问题讨论】:

  • dig <rds hostname> 从 EC2 实例输出什么?获取结果需要多长时间?
  • 环境变量完全不需要时间来获取(之前和之后的时间戳相同)。输出是 RDS 数据库的 end_point。它与我从 mySQL Workbench 连接时使用的相同。我还没有真正搞砸查询,因为连接需要很长时间。
  • 我不是在问环境变量。我想知道当您尝试在mysqli_connect使用这些环境变量时,DNS 查找是否是您的问题。同样,dig <rds hostname> 从您的 EC2 实例输出什么需要多长时间? (如果您要获取 RDS 端点的内部或外部 IP,我也很感兴趣。)
  • 哦!对不起,我是这样一个软件人,我有时会错过配置问题。我是否需要将 putty 放入 EC2 才能运行 dig 名称?
  • 是的,Putty 会很好。

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


【解决方案1】:

感谢@ceejayoz 对我和 Putty 的耐心等待。我意识到我的 RDS HOSTNAME 环境变量指向了我的 Elastic Beanstalk URL,而不是我的 RDS 实例。这很可能会卡在重定向中。

我刚刚再试了一次,从开始到结束的时间戳差异是 0!

【讨论】:

  • 这样就行了,呵呵。很高兴你把它整理好了。
猜你喜欢
  • 1970-01-01
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2013-06-07
  • 2015-01-29
  • 2021-04-17
  • 1970-01-01
相关资源
最近更新 更多