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

时间:2015-05-12 06:04:05

标签: mysql openshift laravel-5

我从https://github.com/luciddreamz/laravel laravel下载了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失败:名称或服务未知

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

error message

19 个答案:

答案 0 :(得分:32)

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

  
      
  1. SQLSTATE错误代码(ANSI SQL标准中定义的五个字符的字母数字标识符)。
  2.   
  3. 特定于驱动程序的错误代码。
  4.   
  5. 特定于驱动程序的错误消息。
  6.   
  • " HY000"是一般服务器错误(请参阅MySQL文档中的Server Error Codes and Messages)。
  • " 2002"是MySQL客户端错误代码含义"无法通过socket"连接到本地MySQL服务器(参见(MySQL文档中的Client Error Codes and Messages)。
  • 驱动程序特定的错误代码和消息(" php_network_getaddresses:getaddrinfo失败:名称或服务未知")告诉您PDO无法解析主机名。

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

答案 1 :(得分:4)

检查DB_HOST文件中的.env

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

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

答案 2 :(得分:3)

我遇到了同样的问题,通过将 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>

答案 3 :(得分:3)

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

答案 4 :(得分:2)

看起来您没有在应用程序中添加MySQL数据库,或者在安装laravel后添加了它。在这种情况下,你需要停止&amp;启动(不重启)您的应用程序,以便它将获取您的环境变量。 (rhc app stop,rhc app start)。 如果你还没有添加数据库,则需要添加一个mysql盒,然后停止&amp;使用之前显示的命令启动您的应用程序。

答案 5 :(得分:2)

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

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

然后,您需要使用docker system prune -a重新启动Docker映像。

还需要在.env中更改DB_HOST=mysql。并运行php artisan config:clear

我认为这会帮助某人。

答案 6 :(得分:1)

如果您使用的是 docker,只需检查以确保您的 DB_HOST 值对应于通过运行 public class MyRegistry : Registry { public class Task : ModuleBase { public Task() { JobManager.AddJob(() => (CommandHandler._discord.GetChannel(CHANNELS_ID) as IMessageChannel).SendMessageAsync("test"), (s) => s.ToRunEvery(3).Seconds()); } } static void Initializer() { JobManager.Initialize(new MyRegistry()); } } 获得的正确 IP 地址

答案 7 :(得分:1)

在我的情况下,当laravel生成.env配置文件时,laravel在第11行和第12行还生成了两行未注释的“ DB_HOST”行,请删除显示“ mysql”的行,并取消注释(如果有注释的话)另一行(带有localhost ip 127.0.0.1的那个),它可以正常工作。 (以我为例)。

祝你有美好的一天

答案 8 :(得分:1)

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

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

答案 9 :(得分:1)

如果您在生产服务器上并且.env文件根本不起作用,请转至/bootstrap/cache/config.php,然后在第230行或多或少找到从中缓存的beeing数据库数据。 .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',
  ),

答案 10 :(得分:1)

我们正在使用带有学说的symfony,我们正在自动部署。当我没有在parameters.yml中提供正确的数据库信用时,我收到了这个错误(我正在运行doctrine:migrations:migrate)

这个帖子让我有点疯狂的追逐,所以我把它留在这里,以便别人可能没有。

答案 11 :(得分:1)

我正在使用Laravel和Docker。我通过将DB_HOST的值从localhost更改为mysql来解决了这个问题。

DB_HOST=mysql

答案 12 :(得分:1)

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

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

我正在使用Windows 10,在这种情况下,docker的gui为我们提供了一些设施。

右键单击托盘栏中的泊坞窗图标,然后选择“设置”项。

Docker's options

然后,在Docker的窗口中,选择“网络”部分,将DNS选项从“自动”更改为“固定”,然后点击“应用”。 Docker将在此之后重新启动。我推出了谷歌的DNS(8.8.8.8),它对我来说很好。

docker's network section with dns config

希望它有所帮助。

答案 13 :(得分:0)

如果某人在hostgator之类的托管服务中遇到此问题或其他任何东西 那么您必须将“ localhost”的值更改为托管服务提供商提供的相对值。就我而言,它在右上角“ cpanel”的“ phpmyadmin”标签中为“ localhost:3302”

答案 14 :(得分:0)

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

答案 15 :(得分:0)

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

我一直在使用laradock使用本地laravel测试环境。由于laradock在另一个容器中运行mysql服务器,因此您必须将.env文件中的mysql主机设置为docker mysql容器的名称,默认情况下为mysql。

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

真是一个DUH时刻!

答案 16 :(得分:0)

就像在FYI上一样,其他人在以前(以前)可以正常使用的Laravel安装中突然遇到了这一点:

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

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

答案 17 :(得分:0)

请尝试以下代码:

npm install

答案 18 :(得分:-1)

如果您将 Shopware 与docker结合使用,则需要首先运行./psh.phar ssh,然后任何bin/console命令都将起作用