如何从 Yii2 连接到 RDS 数据库?
Posted
技术标签:
【中文标题】如何从 Yii2 连接到 RDS 数据库?【英文标题】:How to connect to an RDS database from Yii2? 【发布时间】:2017-11-09 11:35:48 【问题描述】:我已经在 AWS Elastic Beanstalk 上部署了一个基于 Yii2 的应用程序,我还在 Elastic Beanstalk 上创建了带有数据库(它已经有表)的 RDS 实例。但是我收到了这个错误:“SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known”
所有文件均已正确上传到 AWS 实例。
文件 /common/config/main-local.php 有:
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=',
'dsn' => 'mysql:host=RDS_HOSTNAME:RDS_PORT;dbname=RDS_DB_NAME',
'username' => 'RDS_USERNAME',
'password' => 'RDS_PASSWORD',
'charset' => 'utf8',
],
可能出了什么问题?谢谢。
【问题讨论】:
【参考方案1】:我猜你想通过环境变量传递数据库信息。您可能想尝试修改代码如下。
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=',
'dsn' => 'mysql:host='.$_SERVER['RDS_HOSTNAME'].':'.$_SERVER['RDS_PORT'].';dbname='.$_SERVER['RDS_DB_NAME'],
'username' => $_SERVER['RDS_USERNAME'],
'password' => $_SERVER['RDS_PASSWORD'],
'charset' => 'utf8',
],
您可以在配置环境属性部分引用http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/AWSHowTo.RDS.html#rds-external-ec2classic 来配置您的环境变量。希望这行得通。
【讨论】:
我把上面的代码通过 AWS 设置了变量,但是我收到了这个错误:“PDO Exception SQLSTATE[HY000] [2002] Connection timed out”。有什么问题?谢谢。 我通过在 EC2>Network&Security>Security Groups>Edit inbound rules 上更改为“所有流量”解决了这个问题【参考方案2】:你有 2 倍的 'dsn' 行,也许第一个存在,所以将你的配置改为这个应该可以:
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=RDS_HOSTNAME:RDS_PORT;dbname=RDS_DB_NAME',
'username' => 'RDS_USERNAME',
'password' => 'RDS_PASSWORD',
'charset' => 'utf8',
],
(另外我希望您知道您必须更改 RDS_* 参数:D)
【讨论】:
你的意思是:另外我希望你知道你必须改变 RDS_* 参数。谢谢 我的意思是你必须用一些实际的 FQDN 或 IP 替换例如 RDS_HOSTNAME,对于 RDS_PORT RDS_DB_NAME、RDS_USERNAME 和 RDS_PASSWORD 也是如此 我读到那些是环境变量。我可能误解了(docs.aws.amazon.com/elasticbeanstalk/latest/dg/…)。谢谢。 它们可能是环境变量,但这不是您从服务器读取这些变量的方式。如果您在链接中向下滚动,您将看到如何在 PHP 中使用这些变量填充连接字符串 我了解到Yii2上已经安装了PDO,对吗?后者是事实,变量需要像 $dbhost = $_SERVER['RDS_HOSTNAME'];这是从 Yii2 调用 RDS 数据库的方式吗?谢谢。以上是关于如何从 Yii2 连接到 RDS 数据库?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mySQL 工作台连接到 AWS 私有子网 VPC 中的 RDS
如何从我的 springboot 应用程序的 Docker 映像连接到 Amazon RDS 实例?
无法从 MySQL Workbench 连接到 RDS MySQL 数据库