【发布时间】: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