在Mac上设置Laravel php artisan migrate错误:没有这样的文件或目录

时间:2013-10-20 09:17:28

标签: php mysql laravel mmap

  1. 将一个完美工作的laravel项目从一个git拉到一个运行MAMP的mac上。项目在linux机器上完美运行。
  2. composer install
  3. php artisan migrate,出现以下错误:

    [PDOException]                                    
    SQLSTATE[HY000] [2002] No such file or directory 
    
  4. NB: 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

8 个答案:

答案 0 :(得分:170)

如果您正在使用MAMP,请确保添加unix_socket密钥,其中包含mysql.sock驻留在MAMP中的路径值。

'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'    => '',
    ),

答案 1 :(得分:19)

不要假设你的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。

答案 2 :(得分:16)

有同样的问题,但它现在对我有用。

如果有人仍有问题,请尝试:

  • 确保您的bootstrap/start.php包含您的实际主机名,而不是虚拟主机的名称。在终端中输入hostname以获取您的主机名。因为它是一个数组,我相信你可以输入你的主机名和虚拟主机的名称。
  • 将“localhost”替换为“127.0.0.1”。

答案 3 :(得分:12)

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

'mysql' => array(
        'driver'      => 'mysql',
        'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
        'host'        => 'localhost'
)

答案 4 :(得分:9)

这适用于Laravel 5.0,更改.env文件中的 DB_HOST = 127.0.0.1:33060

其他人的回答是不行的......

答案 5 :(得分:5)

对于Laravel 5.0+,在您使用Unix套接字等之前,还要在.env文件中将localhost更改为127.0.0.1 - 这对我有用。

Noobs要注意:对于任何使用Laravel 5并使用较旧的学习材料的人都要注意文件夹结构与以前版本相比有明显的变化,尽管这似乎更好 - 查看本文https://mattstauffer.co/blog/laravel-5.0-directory-structure-and-namespace < / p>

答案 6 :(得分:3)

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

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

答案 7 :(得分:3)

如果您使用的是Laravle 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 param被添加到上面的mysql配置驱动器中。