SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo 失败:名称或服务未知

Posted

技术标签:

【中文标题】SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo 失败:名称或服务未知【英文标题】:SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known 【发布时间】:2015-07-22 20:40:26 【问题描述】:

我从https://github.com/luciddreamz/laravelLaravel 下载 openshift 然后通过 github 上传到我的存储库。此用于连接数据库的代码不起作用。 问题是从位于项目根目录的.env 文件中加载变量

为解决这个问题而改变.env

# local environment only
#   for production, see .openshift/.env

APP_ENV=APPLICATION_ENV
APP_DEBUG=true
APP_URL=OPENSHIFT_APP_DNS
APP_KEY=OPENSHIFT_SECRET_TOKEN

DB_DRIVER=mysql
DB_HOST=OPENSHIFT_MYSQL_DB_HOST
DB_PORT=OPENSHIFT_MYSQL_DB_PORT
DB_DATABASE=OPENSHIFT_APP_NAME
DB_USERNAME=OPENSHIFT_MYSQL_DB_USERNAME 
DB_PASSWORD=OPENSHIFT_MYSQL_DB_PASSWORD

CACHE_DRIVER=apc
SESSION_DRIVER=file

我的错误:

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

createConnection('mysql:host=OPENSHIFT_MYSQL_DB_HOST;port=OPENSHIFT_MYSQL_DB_PORT;dbname=OPENSHIFT_APP_NAME', 
array('driver' => 'mysql', 
      'host' => 'OPENSHIFT_MYSQL_DB_HOST', 
      'port' => 'OPENSHIFT_MYSQL_DB_PORT', 
      'database' => 'OPENSHIFT_APP_NAME', 
      'username' => 'OPENSHIFT_MYSQL_DB_USERNAME', 
      'password' => 'OPENSHIFT_MYSQL_DB_PASSWORD', 
      'charset' => 'utf8',  
      'collation' => 'utf8_unicode_ci', 
      'prefix' => '', 
      'strict' => false, 
      'name' => 'mysql'), 
array('0', '2', '0', false, '0')) in MySqlConnector.php line 20

【问题讨论】:

我感觉您没有阅读包含的有关本地/远程开发的自述文件。签出:github.com/luciddreamz/laravel#local-vs-remote-development 我使用你的代码,但这不起作用然后我有更改 .env 文件 【参考方案1】:

错误消息的第一行描述了错误类型:“PDOException”。下一行显示PDO::errorInfo,即:

    SQLSTATE 错误代码(ANSI SQL 标准中定义的五个字符的字母数字标识符)。 驱动程序特定的错误代码。 驱动程序特定的错误消息。
“HY000”是一般服务器错误(请参阅 MySQL 文档中的 Server Error Codes and Messages)。 “2002”是 MySQL 客户端错误代码,意思是“无法通过套接字连接到本地 MySQL 服务器”(请参阅​​(MySQL 文档中的Client Error Codes and Messages)。 驱动程序特定的错误代码和消息(“php_network_getaddresses: getaddrinfo failed: Name or service not known”)告诉您 PDO 无法解析主机名。

您附加的堆栈跟踪第 3 行显示您没有在配置文件中指定数据库连接参数。在本地测试时会出现错误,对吗?您需要使用实际的数据库连接参数更新/.env

【讨论】:

什么参数是假的?为了我把它改成实际参数? @javadhajian .env 中的那些。我猜想在本地 APP_*DB_* 常量引用 OPENSHIFT_* 环境变量应该替换为您的数据库参数。 'APP_' 'DB_' 不是常数,但这是有参数的变量【参考方案2】:

在您的 .env 文件中检查您的 DB_HOST

DB_HOST=http://localhost/ --> DB_HOST=localhost

php artisan config:clear它会帮助你,清除缓存的配置

【讨论】:

【参考方案3】:

如果有人在使用Docker 时遇到此问题,请确保您使用的是您的 SQL 版本。

在我的情况下:MYSQL_VERSION=latest 更改为 MYSQL_VERSION=5.7

然后您需要使用docker system prune -a (docs) 删除未使用的 Docker 映像。

另外,在您的.env 中您需要更改:

DB_HOST=mysql

然后运行:

php artisan config:clear

我认为它会对某人有所帮助。

【讨论】:

我只在运行种子时遇到过这个问题,尝试过没有成功。但在 docker image docker-compose exec workspace bash 中运行种子运行良好。【参考方案4】:

我将 Laravel 与 Docker 一起使用。我通过将DB_HOST 的值从localhost 更改为mysql 解决了这个问题。

DB_HOST=mysql

【讨论】:

我已经寻找您的评论大约 4 小时了。谢谢! 很高兴它帮助了哥们! 我的 DB_HOSTmysql 但不工作!【参考方案5】:

我遇到了同样的问题,通过将 DB_HOST 值替换为 '127.0.0.1' 解决了 为 DB_SOCKET 添加额外的行,就我而言,它是 /var/run/mysqld/mysqld.sock

#DB_HOST=mysql
DB_HOST=127.0.0.1
DB_SOCKET=<mysql exicutable path>

【讨论】:

这对我有用。谢谢你:)【参考方案6】:

您似乎没有将 MySQL 数据库添加到您的应用程序,或者您在安装 laravel 后添加了它。在这种情况下,您需要停止并启动(而不是重新启动)您的应用程序,以便它能够获取您的环境变量。 (rhc 应用停止,rhc 应用启动)。 如果您尚未添加数据库,则需要添加其中一个 mysql 墨盒,然后使用前面显示的命令停止和启动您的应用程序。

【讨论】:

我检查此解决方案对我不起作用并向我显示相同的错误【参考方案7】:

我遇到了同样的问题,每个人都在谈论这与 DNS 配置有关,这是有道理的,因为您的容器可能不知道如何解析数据库所在的域的名称。

我想您可以在启动容器时配置它,但我认为最好一劳永逸地配置它。

我使用的是 Windows 10,在这种情况下,docker 的 gui 为我们提供了一些便利。

只需右键单击托盘栏中的 docker 图标,然后选择“设置”项。

然后,在 Docker 的窗口中,选择“网络”部分并将 DNS 选项从“自动”更改为“固定”并点击“应用”。之后 Docker 将自行重启。我使用了 Google 的 DNS (8.8.8.8),对我来说效果很好。

希望对你有帮助。

【讨论】:

【参考方案8】:

在我的例子中,当 laravel 生成 .env 配置文件时,laravel 还在第 11 行和第 12 行生成了两个未注释的“DB_HOST”行,删除“mysql”并取消注释(如果你的它被注释了)另一个(具有 localhost ip 127.0.0.1 的那个)并且它有效。 (就我而言)。

祝你有美好的一天

【讨论】:

【参考方案9】:

如果您在具有多个 docker 容器的网络中,请确保它们都已启动并运行!我的一个容器坏了,如果你知道去哪里检查就很明显了。

【讨论】:

【参考方案10】:

如果您在生产服务器上并且 .env 文件根本不起作用,请转到 /bootstrap/cache/config.php 并在第 230 行或多或少地找到正在缓存的数据库数据.env 文件。

'mysql' => 
  array (
    'driver' => 'mysql',
    'host' => '127.0.0.1',
    'port' => '3306',
    'database' => 'yorDBname',
    'username' => 'YOURUSERNAME',
    'password' => 'yourpass',
    'unix_socket' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',
  ),

【讨论】:

【参考方案11】:

有时会出现这种情况的另一个原因是您的 docker-compose 配置错误(如果您正在使用它),即 mysql 容器不在您的应用服务器所在的同一网络上。

如果网络标志被遗忘或不正确,docker 不会将 mysql 添加到应用服务器的 DNS 中,因此会抛出这样的错误。

【讨论】:

【参考方案12】:

我们正在使用 symfony 和学说,并且我们正在自动化部署过程中。当我根本没有在 parameters.yml 中提供正确的数据库凭据时出现此错误(我正在运行学说:迁移:迁移)

这个帖子让我有点胡思乱想,所以我把它留在这里,这样其他人可能就不必这样做了。

【讨论】:

【参考方案13】:

如果您使用 docker,只需检查以确保您的 DB_HOST 值对应于通过运行 docker inspect -f 'range.NetworkSettings.Networks.IPAddressend' &lt;container_name or id&gt; 获得的正确 IP 地址

【讨论】:

【参考方案14】:

如果有人在托管服务(如 hostgator 或其他任何东西)中遇到此问题 那么您应该将“localhost”的值更改为托管服务提供商提供的相对值。就我而言,它在右上角“cpanel”的“phpmyadmin”选项卡中可用,为“localhost:3302”

【讨论】:

【参考方案15】:

就我而言,这与网络问题完全无关。

我一直在使用 laradock 使用本地 laravel 测试环境。因为 laradock 在不同的容器中运行 mysql 服务器,所以你必须将 .env 文件中的 mysql 主机设置为 docker mysql 容器的名称,默认为 mysql。

当我切换回使用 homestead 时,它试图连接到一个名为 mysql 的主机,而实际上应该在 localhost 上查找。

多么糟糕的时刻!

【讨论】:

【参考方案16】:

我在让我的 Laravel 应用程序连接到我的 Laravel Sail MySQL 8.0 容器时遇到问题。我通过将 DB_HOSTmysql 更改为 127.0.0.1 解决了这个问题(与 Sail 文档所说的相反)。

【讨论】:

【参考方案17】:

就像其他人在其他(以前)工作的 Laravel 安装中突然遇到这种情况一样,仅供参考:

我的 Laravel 环境是在 Win-10 笔记本电脑上托管的 Ubuntu VirtualBox 上。

我用我的手机通过 USB 共享互联网,突然开始遇到这个问题。我改用手机作为无线热点,问题就消失了。这是一个名称服务器/网络问题,并非特定于 Laravel 或 MySQL。

【讨论】:

【参考方案18】:

就我而言,一切都设置正确,但我的 Docker 基础架构需要更多 RAM。我正在使用 Docker for Mac,其中默认 RAM 大约为 1 GB,并且由于 MySQL 使用大约 1.5Gb 的 RAM(并且可能正在崩溃???),将 Docker RAM 利用率级别更改为 3-4 Gb 解决了这个问题。

【讨论】:

【参考方案19】:

如果您将 Shopware 与 docker 一起使用,那么您需要先运行 ./psh.phar ssh,然后任何 bin/console 命令都可以使用

【讨论】:

以上是关于SQLSTATE [HY000] [2002] php_network_getaddresses:getaddrinfo 失败:名称或服务未知的主要内容,如果未能解决你的问题,请参考以下文章

PDOException SQLSTATE[HY000] [2002] 没有这样的文件或目录

PDOException SQLSTATE[HY000] [2002] 没有这样的文件或目录

PDOException SQLSTATE[HY000] [2002] 没有这样的文件或目录

PDOException SQLSTATE[HY000] [2002] 没有这样的文件或目录

SQLSTATE[HY000] [2002] 连接被拒绝 |

Laravel:SQLSTATE [HY000] [2002] 连接被拒绝