如何从Yii2连接到RDS数据库?

时间:2017-06-07 23:03:34

标签: amazon-web-services yii2 elastic-beanstalk rds

我已经将基于Yii2的应用程序部署到AWS Elastic Beanstalk上,我还在Elastic Beanstalk上创建了带有数据库(它已经有表)的RDS实例。但是我收到了这个错误:“SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo failed:名称或服务未知”

所有文件都正确上传到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',
        ],

可能有什么不对?感谢。

2 个答案:

答案 0 :(得分:1)

我猜你想通过环境变量传递db信息。您可能想尝试修改代码,如下所示。

'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来配置环境变量。希望这有效。

答案 1 :(得分:0)

你有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)