建立具有RDS的数据库连接AWS Elastic Beanstalk时出错

时间:2019-05-10 22:25:29

标签: php wordpress amazon-rds amazon-elastic-beanstalk

我试图通过使用AWS Elastic Beanstalk和断开的RDS数据库(如果要将多个站点连接到数据库,不属于ELB实例)来建立一个简单的Wordpress站点,大致遵循以下指南: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html

但是,加载Wordpress安装时出现以下错误:

Error establishing a database connection

到目前为止,我已经尝试通过以下方法解决问题:

  1. 验证RDS和EC2是否都在连接了相同安全组且具有正确入站规则的同一VPC上:

EC2 Security Group Inbound Rules RDS Security Group

  1. 我已验证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!
  1. 我已经验证我的EC2可以通过SSH并使用mysql命令并复制/粘贴我的env变量以确保没有@littleforest建议的错字来连接到RDS,已成功连接到数据库。

  2. 我已经更新了AWS随附的示例PHP应用程序,以输出我的env变量,以确保服务器正在读取它们。他们按需输出。

我的wp_config.php文件看起来像turtorial推荐的那样:

<?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的config>软件中,我已经验证了以下变量:

  • RDS_DB_NAME
  • RDS_HOSTNAME
  • RDS_PASSWORD
  • RDS_PORT
  • RDS_USERNAME

我知道我缺少某种愚蠢的东西,一个AWS专家马上就会抓住它,但这真让我发疯。

1 个答案:

答案 0 :(得分:0)

好的!几次偏头痛并尖叫着键盘后,我才知道发生了什么。

由于我能够通过SSH连接到RDS服务器,所以我认为问题必须出在Wordpress上。果然,当我打开DEBUG模式时,Wordpress在RDS服务器上找不到我的数据库。

事实证明,设置RDS 数据库实例ID不是数据库名称。但是,即使在高级配置选项下指定名称,RDS也不会在启动时设置该数据库。

因此,要解决此问题,我必须:

  1. 通过SSH进入我的EC2实例,并按照{littleforest建议的那样使用mysql命令连接到RDS
  2. 在mysql控制台中创建数据库。

然后,一旦我确认数据库存在于mysql控制台中,我就可以运行著名的5分钟的Wordpress安装。