PHP Artisan Migrate with MAMP and Unix Socket

wgmfuz8q  于 2023-09-29  发布在  PHP
关注(0)|答案(6)|浏览(115)

我最初在Laravel 4.2中开发我的应用程序,但后来决定将其移至5.0版本,以便它涵盖5.0比4.2更多的变化和优势。
我试图运行我的migratiosn,但我得到的错误:

[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套接字值。
有人能提示我如何将其应用到新版本中,或者有更好的方法将其添加到设置中,以便我不必这样做吗?

f2uvfpb9

f2uvfpb91#

试试这个:

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

在.env中添加

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

zxlwwiss2#

虽然是个老问题,但仍然可以帮助别人。所以添加答案。
甚至有一个简单的解决方案。将此添加到ur.env文件

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

w6mmgewl3#

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

wh6knrhe4#

谢谢,帮助我修复迁移问题,使用:

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);
}
rta7y2nd

rta7y2nd5#

在.env文件中,只需简单地将其添加到数据库变量旁边

DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
e37o9pze

e37o9pze6#

我创建了一个StackOverflow帐户,只是为了回答这个问题,也许可以帮助防止有人经历我所经历的痛苦。
我在网上找到的答案包括将127.0.0.1更改为localhost,将端口从3306更改为33060,反之亦然,以及确保unix_socket正确。
解决我的问题的方法正在改变:

DB_CONNECTION=mysql
DB_HOST=localhost

DB_CONNECTION=mysql
DB_HOST=mysql

我希望这对外面的人有帮助。我花了4个小时才找到这个痛苦而明显的解决方案...结果发现1min29s进入了一个obscure YouTube video,浏览量不到1000次。

相关问题