首页 > 解决方案 > 使用 RDS 建立数据库连接 AWS 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 安全组入站规则 RDS 安全组

  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 连接到 RDS 并使用mysql命令并复制/粘贴我的 env 变量以确保没有 @littleforest 推荐的拼写错误,它已成功连接到数据库。

  2. 我更新了 AWS 附带的示例 PHP 应用程序以输出我的环境变量,以确保服务器正在读取它们。他们按照他们应该的方式输出。

我的 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 的配置 > 软件中,我已经验证了这些变量:

我知道 AWS 专家会立即发现我遗漏了一些愚蠢的东西,但这让我发疯了。

标签: phpwordpressamazon-rdsamazon-elastic-beanstalk

解决方案


好吧!在经历了几次偏头痛和对着我的键盘尖叫之后,我弄清楚了发生了什么。

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

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

所以为了解决这个问题,我不得不:

  1. SSH 到我的 EC2 实例并使用mysql@littleforest 建议的命令连接到 RDS
  2. 在 mysql 控制台中创建数据库。

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


推荐阅读