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
,即:
“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 无法解析主机名。SQLSTATE 错误代码(ANSI SQL 标准中定义的五个字符的字母数字标识符)。 驱动程序特定的错误代码。 驱动程序特定的错误消息。
您附加的堆栈跟踪第 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 imagedocker-compose exec workspace bash
中运行种子运行良好。【参考方案4】:
我将 Laravel 与 Docker 一起使用。我通过将DB_HOST
的值从localhost
更改为mysql
解决了这个问题。
DB_HOST=mysql
【讨论】:
我已经寻找您的评论大约 4 小时了。谢谢! 很高兴它帮助了哥们! 我的DB_HOST
是 mysql
但不工作!【参考方案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' <container_name or id>
获得的正确 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_HOST
从 mysql
更改为 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] 没有这样的文件或目录