【问题标题】:Getting Connection time out error in Heroku connecting to RDS MySQL在 Heroku 连接到 RDS MySQL 时出现连接超时错误
【发布时间】:2019-03-08 16:53:10
【问题描述】:

我正在尝试使用 CodeIgniter PHP 框架版本 3 从 Heroku 连接到亚马逊 RDS MySQL。我按照Heroku documentation about Amazon RDS 中列出的所有步骤操作,但不知道我做错了什么?

这是我的 CodeIgniter 数据库设置:

$db['rds'] = array(
  'dsn' => '',
  'dbdriver' => 'mysqli',
  'dbprefix' => '',
  'pconnect' => FALSE,
  'db_debug' => (ENVIRONMENT !== 'production'),
  'cache_on' => FALSE,
  'cachedir' => '',
  'char_set' => 'utf8',
  'dbcollat' => 'utf8_general_ci',
  'swap_pre' => '',
  'compress' => FALSE,
  'stricton' => FALSE,
  'failover' => array(),
  'save_queries' => TRUE,
  'port' => 3306,
  'encrypt' => [
    'ssl_ca' => APPPATH."../.config/rds-combined-ca-bundle.pem",
    'ssl_verify' => TRUE
  ]
);
$db['rds']['hostname'] = getenv('RDS_DATABASE_HOSTNAME');
$db['rds']['username'] = getenv('RDS_DATABASE_USERNAME');
$db['rds']['password'] = getenv('RDS_DATABASE_PASSWORD');
$db['rds']['database'] = getenv('RDS_DATABASE_DBNAME');

但我不断收到此错误:

mysqli::real_connect(): (HY000/2002): Connection timed out /app/vendor/codeigniter/framework/system/database/drivers/mysqli/mysqli_driver.php 201

这是我检查的内容:

  1. 我检查了 RDS 安全组和 CIDR/IP - 出站 0.0.0.0/0 在那里
  2. 我添加了一个单独的 MySQL 用户,具有 GRANT 权限 SELECT、UPDATE、INSERT、DELETE 和 REQUIRE SSL
  3. 将合并后的证书文件添加到项目根目录.config/rds-combined-ca-bundle.pem并部署在Heroku上
  4. 在本地机器上同样的代码可以正常工作
  5. 已尝试重启 RDS 实例

如果某些设置有误,我应该去哪里查看?

【问题讨论】:

    标签: php mysql amazon-web-services codeigniter heroku


    【解决方案1】:

    您的 CodeIgniter 代码需要连接到您的数据库,而不是相反。 RDS 安全组中的出站规则无济于事;你需要一个 inbound 规则(加粗):

    您必须授予 Heroku dynos 访问您的 RDS 实例的权限。推荐的方法是将 RDS 实例配置为仅接受来自授权用户的 SSL 加密连接,并将您的实例的安全组配置为允许来自所有 IP 的ingress,例如0.0.0.0/0

    由于这实际上在您的防火墙中打开了通往整个 Internet 的漏洞,因此遵循这些说明的其余部分并仅接受来自授权用户的加密连接非常重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-25
      • 2021-03-01
      • 2019-01-30
      • 2017-10-05
      • 2022-01-21
      • 2016-08-04
      • 2020-02-13
      • 2017-08-11
      相关资源
      最近更新 更多