PHP Artisan 使用 MAMP 和 Unix Socket 进行迁移

PHP Artisan Migrate with MAMP and Unix Socket

我最初是在 Laravel 4.2 开发我的应用程序,但后来决定将其移至 5.0 版本,以便它涵盖 5.0 超过 4.2 的更多变化和优势。

我正在尝试 运行 我的迁移,但是我收到错误:

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

我调查了这个并注意到它是怎么回事,因为我正在为我的服务器 运行ning MAMP 而不是 vagrant 和 homestead。我并没有否定这两者的用途,但在这一点上,我对 MAMP 感觉更舒服,直到它让我失望。我知道它的 MAMP 的原因是因为需要声明要使用的 unix 套接字值。

现在,在我的 4.2 版应用程序中,我有以下内容:

'mysql' => array(
    'driver'    => 'mysql',
    'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
    'host'      => getenv('DB_HOST'),
    ...
),

在我的 Laravel 5.0 版本中,我正在为我的环境变量使用 .env 文件,但不确定我需要怎么做才能知道使用 unix 套接字值。

有人可以告诉我应该如何将它应用到新版本中,或者更好的方法将它添加到设置中,这样我就不必这样做了吗?

试试这个:

'mysql' => array(
'driver'    => 'mysql',
'unix_socket'   => getenv('UNIX_SOCKET'),
'host'      => getenv('DB_HOST'),
...
),

在 .env 中添加

UNIX_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

虽然很老的问题,但仍然可以帮助别人。所以添加答案。

甚至还有简单的解决方案。将此添加到您的 .env 文件

DB_HOST=localhost;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock

谢谢,帮我解决迁移问题:

MAMP PRO 4.2
Laravel 5.5

在 .env 文件中:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=<database name>
DB_USERNAME=<username - default root>
DB_PASSWORD=<password - default root>
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

里面 config/database.php:

'connections' => [

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', '<database name>'),
        'username' => env('DB_USERNAME', '<username - default root>'),
        'password' => env('DB_PASSWORD', '<password - default root>'),
        'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    ],
],

另外不要忘记添加到 app/Providers/AppServiceProviders.php:

use Illuminate\Support\Facades\Schema;
public function boot()
{
   Schema::defaultStringLength(191);
}

在 laravel 5.5 中 unix_socket 更改为 DB_SOCKET

在 .env 文件中:

DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

里面 config/database.php:

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

我创建了一个 Whosebug 帐户只是为了回答这个问题,也许可以帮助防止有人经历我经历过的痛苦。

我在网上找到的答案包括将 127.0.0.1 更改为本地主机,将端口从 3306 更改为 33060,反之亦然,以及确保 unix_socket 正确无误。

解决我问题的解决方案正在改变:

DB_CONNECTION=mysql
DB_HOST=localhost

DB_CONNECTION=mysql
DB_HOST=mysql

我希望这对外面的人有所帮助。我花了 4 个小时才找到这个非常明显的解决方案...并且发现 obscure YouTube video 1 分钟 29 秒,浏览量不到 1000。