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, 技巧
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码