【问题标题】:How to connect to an RDS database from Yii2?如何从 Yii2 连接到 RDS 数据库?
【发布时间】: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',
        ],

可能出了什么问题?谢谢。

【问题讨论】:

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


    【解决方案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 数据库的方式吗?谢谢。
    猜你喜欢
    • 2016-11-21
    • 2016-07-24
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    相关资源
    最近更新 更多