49
  1. 将一个完美运行的 laravel 项目从 git 拉入运行 MAMP 的 mac。项目在 linux 机器上完美运行。
  2. 作曲家安装
  3. php artisan migrate,得到以下错误:

    [PDOException]                                    
    SQLSTATE[HY000] [2002] No such file or directory 
    

注意:终端的 php -v 是 5.5,mysql -v 是 5.5 这是我的 config/database.php 的一部分

    'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'database'  => 'essays',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),

我尝试用 127.0.0.1 替换 localhost 无济于事。请帮助..

编辑: 我在 php.ini 中添加了这三行

mysql.default_socket = /var/run/mysqld/mysqld.sock

mysqli.default_socket = /var/run/mysqld/mysqld.sock

pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock

我还添加了这个符号链接:

sudo mkdir /var/mysql
cd /var/mysql && sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock

但这并没有解决。我还从 git 中提取了一个全新的 laravel 项目,然后遇到了同样的composer install错误php artisan migrate

 [PDOException]                                    
  SQLSTATE[HY000] [2002] No such file or directory 

mac版本是10.7.4

4

8 回答 8

175

如果您使用的是 MAMP,请务必添加unix_socket带有 MAMP 中路径值的键mysql.sock

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => 'localhost',
        'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
        'database'  => 'database',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
于 2013-12-30T18:30:49.027 回答
23

不要假设您的 unix_socket 会有所不同,请尝试找到它。

首先,获取您的 unix_socket 位置

$ mysql -uroot -p

输入您的 mysql 密码并从命令行登录您的 mysql 服务器。

mysql> show variables like '%sock%';
+---------------+---------------------------------------+
| Variable_name | Value                                 |
+---------------+---------------------------------------+
| socket        | /opt/local/var/run/mysql5/mysqld.sock |
+---------------+---------------------------------------+

您的 unix_soket 可能会有所不同。

然后你有2个解决方案来解决你的问题:

(1) 改变你的config/database.php

    'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'essays',
    'username'  => 'root',
    'password'  => 'root',
    'unix_socket'   => '/opt/local/var/run/mysql5/mysqld.sock', //Your sock got from above
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),

(2)改变你的php.ini,找到你的php.ini文件

<? phpinfo();

您可能安装了许多不同版本的 php,所以请不要假设您的 php.ini 文件位置,从您的 'phpinfo' 获取它;

更改您的 php.ini:

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock

pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

然后重新启动您的 apache 或 php-fpm。

于 2014-09-03T17:03:24.553 回答
16

Had the same problem, but it's working for me now.

If anybody is still having problems, try this:

  • Make sure your bootstrap/start.php contains your actual hostname, not the name of your virtual host. Enter hostname in the terminal to get your hostname. As it's an array I believe you can enter both your hostname and the name(s) of your virtual host(s).
  • Replace "localhost" with "127.0.0.1".
于 2013-11-08T08:44:21.693 回答
14

如果您使用的是 XAMPP,解决方案是:

'mysql' => array(
        'driver'      => 'mysql',
        'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
        'host'        => 'localhost'
)
于 2014-11-16T03:20:27.837 回答
9

这在 Laravel 5.0 中对我有用,在 .env 文件中更改DB_HOST=127.0.0.1:33060

其他答案无效...

于 2015-08-02T22:26:44.817 回答
6

如果你使用的是 Laravel 5.1.11 版本 + MAC + MAMPP

您必须在文件“yourapp”/app/config/database.php 中添加“Unix_socket”

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
    'database'  => env('DB_DATABASE', 'forge'),
    'username'  => env('DB_USERNAME', 'forge'),
    'password'  => env('DB_PASSWORD', ''),
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
    'strict'    => false,
],

Unix_socket 参数被添加到上面的 mysql 配置驱动器中。

于 2015-10-15T11:11:50.653 回答
5

对于 Laravel 5.0+,在你使用 Unix Sockets 等之前更改localhost127.0.0.1的 .env 文件——这对我有用。

新手当心:对于使用 Laravel 5 和使用较旧学习材料的任何人,请注意文件夹结构与以前的版本相比发生了相当大的变化,尽管这似乎是为了更好 - 查看这篇文章https://mattstauffer.co/blog /laravel-5.0-目录结构和命名空间

于 2015-07-03T10:33:59.710 回答
3

另一种解决方案是在主机密钥中添加端口号。在这种情况下,MAMP 默认使用 8889:

'mysql' => array(
    'driver'    => 'mysql',
    'host'      => 'localhost:8889',
    'database'  => 'essays',
    'username'  => 'root',
    'password'  => 'root',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
),
于 2014-11-25T02:14:29.570 回答