heroku连接rds mysql时出现连接超时错误

7fhtutme  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(401)

我正在尝试使用codeigniterphpframeworkversion3从heroku连接到amazonrdsmysql。我遵循了heroku文档中列出的关于amazonrds的所有步骤,但是我不知道我做错了什么?
以下是我的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

我查了一下:
我检查了rds安全组和cidr/ip-出站0.0.0.0/0是否存在
我添加了一个单独的mysql用户,授予select、update、insert、delete和requiressl权限
已将组合证书文件添加到项目根目录 .config/rds-combined-ca-bundle.pem 部署在希罗库
在本地机器上,相同的代码可以正常工作
尝试重新启动rds示例
如果某些设置错误,我还应该去哪里查看?

t1rydlwq

t1rydlwq1#

codeigniter代码需要连接到数据库,而不是相反。rds安全组中的出站规则没有帮助;您需要入站规则(粗体添加):
您必须授予heroku dynos访问您的rds示例的权限。建议的方法是将rds示例配置为仅接受来自授权用户的ssl加密连接,并将示例的安全组配置为允许从所有ip进入,例如 0.0.0.0/0 .
由于这有效地打开了一个漏洞,你的防火墙,以整个互联网,这是非常重要的遵循其余的说明,并只接受来自授权用户的加密连接。

相关问题