PHP Artisan使用MAMP和Unix套接字进行迁移


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

我对此进行了研究,并注意到了这是怎么回事,因为我正在为我的服务器运行MAMP,而不是流浪者和家园。我并没有抨击这两种方法的用途,但在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

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

谢谢,使用帮助我解决迁移问题

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.hp:

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

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

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

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

DB_CONNECTION=mysql
DB_HOST=localhost

DB_CONNECTION=mysql
DB_HOST=mysql

我希望这能帮助到其他人。我花了4个小时才找到这个显而易见的解决方案。。。在一段浏览量低于1000次的不知名YouTube视频中,它被发现了1分29秒。