我正在尝试使用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示例
如果某些设置错误,我还应该去哪里查看?
1条答案
按热度按时间t1rydlwq1#
codeigniter代码需要连接到数据库,而不是相反。rds安全组中的出站规则没有帮助;您需要入站规则(粗体添加):
您必须授予heroku dynos访问您的rds示例的权限。建议的方法是将rds示例配置为仅接受来自授权用户的ssl加密连接,并将示例的安全组配置为允许从所有ip进入,例如
0.0.0.0/0
.由于这有效地打开了一个漏洞,你的防火墙,以整个互联网,这是非常重要的遵循其余的说明,并只接受来自授权用户的加密连接。