MENU

Mac 下 Laravel 框架数据迁移出现 “No such file or directory”

前言

前几天刚从 ThinkPHP 框架转入到 Laravel 框架的学习,一路上遇到的坑真他妈的的多呀,让我怀疑人生啦。今天按照慕课网的教程,就行数据迁移,但是在我的 Mac 下出现SQLSTATE[HY000] [2002] No such file or directory,当时很无奈啊,明明是数据库可以正常连接,但是还是出现这个问题,最后还要感谢谷歌找到了一篇解决的文章老外写的。

16-1

解决方法

首先说说我的开发环境吧,Mac 下 mamp 作为服务器,还有大名鼎鼎的 phpstrom IDE。

  1. 第一种解决方法 (最佳解决方法)

    config/database.php文件中的mysql连接方法中添加unix_socket密钥 (即为mysql.sock所在 MAMP 路径的值)

    'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_general_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
            'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
    
        ],
    
    

    这样就可以完美解决啦 (当然,不同的本地服务器unix_socket路径不一样,详细看第二种方法啦)

  2. 第二种解决方法

    不要假设你的 unix_socket 会有所不同,尝试找到它
    首先,获取你的 unix_socket 位置

    $ mysql -uroot -p
    

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

    mysql> show variables like '%sock%';
    +-----------------------------------------+-----------------------------------------+
    | Variable_name                           | Value                                   |
    +-----------------------------------------+-----------------------------------------+
    | performance_schema_max_socket_classes   | 10                                      |
    | performance_schema_max_socket_instances | 230                                     |
    | socket                                  | /Applications/MAMP/tmp/mysql/mysql.sock |
    +-----------------------------------------+-----------------------------------------+ 
    

    此时,你可以使用第一种解决方法啦。

    当然这里也有第二种解决方法:更改你的php.ini文件

    我们可以通过phpinfo找到php.ini文件位置。

    <?php
      phpinfo();
    

    这样可以得知php.ini的文件位置,并在此文件添加如下代码:

    mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock
    
    mysqli.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock
    
    pdo_mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock
    

    然后重启你的 Apache 服务器。

  3. 第三种解决方法

    有同样的问题,但它现在为我工作。
    如果有任何人仍然有问题,请尝试:

    • 确保bootstrap/start.php包含您的实际主机名,而不是虚拟主机的名称。输入hostname终端以获取您的主机名。由于它是一个阵列,我相信您可以输入您的主机名和虚拟主机的名称。
    • “127.0.0.1”代替为“localhost”

    说实话,我也你太懂这个什么意思 (不建议用这种方法哈)。

  4. 第四种解决方法

    这适用于我在 Laravel 5.0 中,更改. env 文件中的DB_HOST = 127.0.0.1:33060
    我的 MAMP 被我修改成了 3306 端口,但是用作者方法 33060 是不行的,改成用 3306 是可以解决的,在我的理解,这个应该是加个你的数据库的端口吧。

  5. 第五种解决方法

    在主机密钥中添加端口号。在这种情况下,MAMP 默认使用 8889; 而博主自己的已经改成是 3306 端口,所以,你要看清自己的端口号。

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

参考文章 Setting up Laravel on a Mac php artisan migrate error: No such file or directory [duplicate]

标签: php, 技巧
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码