使用 RDS 建立数据库连接 AWS Elastic Beanstalk 时出错
Posted
技术标签:
【中文标题】使用 RDS 建立数据库连接 AWS Elastic Beanstalk 时出错【英文标题】:Error Establishing Database Connection AWS Elastic Beanstalk with RDS 【发布时间】:2019-09-28 19:56:20 【问题描述】:我正在尝试使用 AWS Elastic Beanstalk 和断开连接的 RDS 数据库(不是 ELB 实例的一部分,以防我想将多个站点连接到数据库)通过大致遵循本指南来设置一个简单的 Wordpress 站点: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html.
但是,在加载 Wordpress 安装时出现以下错误:
Error establishing a database connection
到目前为止,我已尝试通过以下方式解决问题:
-
验证 RDS 和 EC2 是否在同一个 VPC 上,并附加了具有正确入站规则的相同安全组:
-
我已验证 RDS 可用,如下所示:
nrb$ nc -zv <***masked-connection-string***> 3306
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src 192.168.20.149 port 58825
dst 3.215.127.182 port 3306
rank info not available
TCP aux info available
Connection to <***masked-connection-string***> port 3306 [tcp/mysql] succeeded!
我已验证我的 EC2 可以通过 SSH 连接到 RDS 并使用 mysql
命令并复制/粘贴我的 env 变量以确保没有 @littleforest 推荐的拼写错误,这已成功连接到数据库。
我已更新 AWS 附带的示例 PHP 应用程序以输出我的 env 变量,以确保服务器正在读取它们。他们按照他们应该的方式输出。
我的 wp_config.php 文件看起来像教程推荐的那样:
<?php
define('DB_NAME', $_SERVER['RDS_DB_NAME']);
define('DB_USER', $_SERVER['RDS_USERNAME']);
define('DB_PASSWORD', $_SERVER['RDS_PASSWORD']);
define('DB_HOST', $_SERVER['RDS_HOSTNAME'] . ':' . $_SERVER['RDS_PORT']);
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
define('AUTH_KEY', $_SERVER['AUTH_KEY']);
define('SECURE_AUTH_KEY', $_SERVER['SECURE_AUTH_KEY']);
define('LOGGED_IN_KEY', $_SERVER['LOGGED_IN_KEY']);
define('NONCE_KEY', $_SERVER['NONCE_KEY']);
define('AUTH_SALT', $_SERVER['AUTH_SALT']);
define('SECURE_AUTH_SALT', $_SERVER['SECURE_AUTH_SALT']);
define('LOGGED_IN_SALT', $_SERVER['LOGGED_IN_SALT']);
define('NONCE_SALT', $_SERVER['NONCE_SALT']);
$table_prefix = 'wp_';
define('WP_DEBUG', false);
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
在我的 Elastic Beanstalk 的配置 > 软件中,我已经验证了这些变量:
RDS_DB_NAME RDS_HOSTNAME RDS_PASSWORD RDS_PORT RDS_USERNAME我知道 AWS 专家会立即发现我遗漏了一些愚蠢的东西,但这让我发疯了。
【问题讨论】:
您是否已通过 ssh 连接到您的 EB 服务器,并尝试通过命令行连接以确保您使用正确的 RDS_DB_NAME、RDS_USERNAME 等值?mysql -u my_username -h my_rds_instance.cba123x.us-east-1.rds.amazonaws.com -p
另外,我认为您可能还需要在安全组中设置正确的入站规则,允许安全组自己访问端口 3306。虽然不是 100% 确定这一点,因为我总是为我的服务器和数据库使用单独的安全组。
我刚刚用这些方法更新了问题。 mysql
命令能够连接到 RDS,并且我验证了安全组已正确设置。
【参考方案1】:
好的!在经历了几次偏头痛和对着键盘大喊大叫之后,我弄清楚了发生了什么。
由于我能够通过 SSH 连接到 RDS 服务器,我认为问题出在 Wordpress 上。果然,当我打开DEBUG模式时,Wordpress在RDS服务器上找不到我的数据库。
事实证明,当您设置 RDS 数据库实例 ID 不是数据库名称。但是,即使在高级配置选项下指定名称,RDS 也不会在启动时设置该数据库。
所以要解决这个问题,我必须:
-
SSH 到我的 EC2 实例并使用 @littleforest 建议的
mysql
命令连接到 RDS
在 mysql 控制台中创建数据库。
然后,一旦我在 mysql 控制台中验证了数据库,我就能够运行著名的 5 分钟 Wordpress 安装。
【讨论】:
以上是关于使用 RDS 建立数据库连接 AWS Elastic Beanstalk 时出错的主要内容,如果未能解决你的问题,请参考以下文章