【问题标题】:Cant connect my Laravel project with a local MAMP server : SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from `users`)无法将我的 Laravel 项目与本地 MAMP 服务器连接:SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from `users`)
【发布时间】:2020-08-29 17:03:10
【问题描述】:

我已经尝试了几个小时在我的 Laravel 项目和本地 MAMP 服务器之间建立数据库连接。

当我从我的 Mac 上的终端运行命令时,迁移工作。当我在我的 vagrant box 中运行它时,它不起作用。

iMac-van-Tim:myProject timcreemers$ php artisan migrate:status
+------+--------------------------------------------+-------+
| Ran? | Migration                                  | Batch |
+------+--------------------------------------------+-------+
| Yes  | 2014_10_12_000000_create_users_table       | 1     |
| Yes  | 2019_08_19_000000_create_failed_jobs_table | 1     |
+------+--------------------------------------------+-------+

但是当我运行我的应用程序时,我得到了这个错误:

Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from `users`)

当我在http://localhost:8888/ 上连接到我的 MAMP 服务器时,它会显示这些设置:

Host    localhost
Port    8889
User    root
Password    root
Socket  /Applications/MAMP/tmp/mysql/mysql.sock

我的 .env 文件:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=myproject
DB_USERNAME=root
DB_PASSWORD=root

我清空了我的 config/database.php 文件中的属性,因为该文件从 .env 中检索它们:

'connections' => [

    'sqlite' => [
        'driver' => 'sqlite',
        'url' => env('DATABASE_URL'),
        'database' => env('DB_DATABASE', database_path('database.sqlite')),
        'prefix' => '',
        'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
    ],

    'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', ''),
        'port' => env('DB_PORT', ''),
        'database' => env('DB_DATABASE', ''),
        'username' => env('DB_USERNAME', ''),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

    'pgsql' => [
        'driver' => 'pgsql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '5432'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'prefix_indexes' => true,
        'schema' => 'public',
        'sslmode' => 'prefer',
    ],

    'sqlsrv' => [
        'driver' => 'sqlsrv',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '1433'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'prefix_indexes' => true,
    ],

],

/*
|--------------------------------------------------------------------------
| Migration Repository Table
|--------------------------------------------------------------------------
|
| This table keeps track of all the migrations that have already run for
| your application. Using this information, we can determine which of
| the migrations on disk haven't actually been run in the database.
|
*/

'migrations' => 'migrations',

/*
|--------------------------------------------------------------------------
| Redis Databases
|--------------------------------------------------------------------------
|
| Redis is an open source, fast, and advanced key-value store that also
| provides a richer body of commands than a typical key-value system
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
*/

'redis' => [

    'client' => env('REDIS_CLIENT', 'phpredis'),

    'options' => [
        'cluster' => env('REDIS_CLUSTER', 'redis'),
        'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
    ],

    'default' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_DB', '0'),
    ],

    'cache' => [
        'url' => env('REDIS_URL'),
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', '6379'),
        'database' => env('REDIS_CACHE_DB', '1'),
    ],

],

我尝试了许多解决方案,但似乎没有一个有效:

  • 在 unix_socket 属性中添加 /Applications/MAMP/tmp/mysql/mysql.sock
  • 在 localhost 和 127.0.0.1 之间切换 DB_HOST(两种方式都试过)
  • 重新启动我的 MAMP 服务器

我检查了socket路径,发现了一个mysql.sock.lock文件,不知道有没有问题?

iMac-van-Tim:bin timcreemers$ cd /Applications/MAMP/tmp/mysql/
iMac-van-Tim:mysql timcreemers$ ls
mysql.pid       mysql.sock      mysql.sock.lock

根据我的阅读,它可能与套接字有关,但不幸的是我对此一无所知。谁能解释一下 vagrant box 应该如何与 MAMP 服务器一起工作?

此外,为数据库同时使用 Homestead 环境和 Mamp 服务器是否是一种好习惯?还是这让事情变得不必要地复杂化了?

我在这里有点绝望,谁能指出我正确的方向? 提前致谢!

【问题讨论】:

  • 你在 Laracasts 上查看过这个 thread 吗?此外,首选使用 Homestead。
  • 我也关注了这个帖子,但我一直收到同样的错误。我删除了 mamp 服务器,现在只使用宅基地。感谢您的帮助!

标签: laravel macos mamp homestead


【解决方案1】:

如果您在 Mac 上使用 MAMP,有时您需要为套接字添加设置并使用“localhost”而不是 127.0.0.1

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=8889
DB_DATABASE=database_name
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2017-05-20
    • 2019-07-24
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2020-10-03
    • 2015-04-04
    相关资源
    最近更新 更多