更改DNS解析器后"PDO异常:php_network_getaddresses:getaddrinfo failed",在AWS上运行数据库

les*_*gar 7 php mysql dns amazon-web-services laravel

在我们的Laravel 5.2应用程序中,我们使用多个读取服务器(以及多个数据库连接)在AWS上运行数据库设置.

晚上,我们将所有网络服务器的DNS解析器更改为Google DNS(8.8.8.8和8.8.4.4).然后,服务器开始吐出这些:

PDOException:异常'PDOException',消息' SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo failed:名称或服务未知 '在/home/forge/studydrive.net/releases/20170320162143/vendor/laravel/framework/src/Illuminate /Database/Connectors/Connector.php:55

代码Connector.php:55只是PDO构造函数:

public function createConnection($dsn, array $config, array $options)
{
    $username = Arr::get($config, 'username');

    $password = Arr::get($config, 'password');

    try {
        $pdo = new PDO($dsn, $username, $password, $options); // <== THIS ONE
    } catch (Exception $e) {
        $pdo = $this->tryAgainIfCausedByLostConnection(
            $e, $dsn, $username, $password, $options
        );
    }

        return $pdo;
    }
Run Code Online (Sandbox Code Playgroud)

AWS 的.env配置(更改了敏感部分):

DB_HOST=myapp-cluster.cluster-123abc.eu-west-2.rds.amazonaws.com
DB_HOST_WRITE=myapp-cluster.cluster-123abc.eu-west-2.rds.amazonaws.com
DB_HOST_READ=myapp-cluster.cluster-ro-123abc.eu-west-2.rds.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

所以,似乎PHP的PDO突然无法解析DB_HOST名称.

请注意,我们不能使用IP DB_HOST,因为主机名(在AWS端)映射到3个不同的数据库READ服务器.

此外,在我们更换旋转变压器之前,一切正常.

任何人都知道可能导致PDO错误的原因,或者如何解决它?

小智 5

这是libc中的一个错误,根据:

https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/1674733

php_network_getaddresses:getaddrinfo failed:名称或服务未知ubuntu