Laravel 5.1 - 连接到 MySQL 数据库 (MAMP)

6

网络上有些讨论这个问题的主题,但是我找不到任何整洁的解释或者对于这个问题的实质回答。我的目标是将 Laravel 5.1 连接到 MAMP 的 MySQL 数据库。


在我的 config>app.php: 文件中:

   'default' => env('DB_CONNECTION', 'mysql'),


   'mysql' => [
        'driver'    => 'mysql',
        'host'      => 'localhost:8889',
        'database'  => 'test',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'unix_socket'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
        'prefix'    => '',
        'strict'    => false,
    ],

在我的.env文件中:

      DB_HOST=localhost
      DB_DATABASE=test
      DB_USERNAME=root
      DB_PASSWORD=root

我也有一个 .env.example: 文件(我相信它没有任何功能)。
      DB_HOST=localhost
      DB_DATABASE=homestead
      DB_USERNAME=homestead
      DB_PASSWORD=secret

我在database>migrations目录下有create_users_table.phpcreate_password_resets_table.php文件(尽管我没有运行任何迁移:migration:make)。


MAMP成功地将服务器定向并运行,因为它在localhost上加载项目。


这是我的MAMP设置:

test数据库已创建(其中包含我以前在其他项目中创建和使用的表,而不是Laravel)。


尽管一切似乎正确,但在尝试提交Auth表单时,我收到以下错误:

Connector.php的PDOException第50行: 找不到驱动程序

  1. 在Connector.php的第50行

  2. 在PDO->__construct('mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=test','root','root',array('0','2','0',false,false))中的

  3. 在MySqlConnector.php的第22行中,使用Connector->createConnection('mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=test',array('driver' => 'mysql', 'host' => 'localhost:8889', 'database' => 'test', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', 'prefix' => '', 'strict' => false, 'name' => 'mysql')和

等等...


你使用的是哪个版本的MAMP? - dyachenko
@dyachenko 你好,3.0.7.1。 - senty
5个回答

15

在Mac或Unix上,您必须在配置文件database.php中包含套接字路径。

例如 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',


4
你的答案对我很有帮助,因为我无法使用MAMP将Laravel项目连接到MySQL,但是后来我在.env文件中添加了DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock,连接就建立了。你的回答给了我灵感,谢谢并点赞。 - Mostafa Arian Nejad
2020年:我正在使用MacOS Mojave,这确实是我建立连接所需的。 - Derk Jan Speelman
@DerkJanSpeelman对我没用。https://stackoverflow.com/questions/60865114/laravel-remote-db-connection-issue-on-mamp-pro-osx - twister_void
@twister_void 嗯,也许最好只是在 Docker 中设置好所有内容。 - Derk Jan Speelman

9

对我来说很简单,我只需要在.env文件中的localhost后面加上:8889。

DB_HOST=localhost:8889

这是因为在MAMP偏好设置中,:8889是默认端口。


6

对我来说最重要的是定义UNIX套接字。因为我的机器上有另一个MYSQL - Laravel试图连接到那个MYSQL进程中的数据库。

在database.php中尝试将MAMP数据库的UNIX定义为要使用的内容,这样做可以完美解决问题。

   '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'   => '/Applications/MAMP/tmp/mysql/mysql.sock',
      'charset' => 'utf8mb4',
      'collation' => 'utf8mb4_unicode_ci',
      'prefix' => '',
      'strict' => true,
      'engine' => null,
    ],

3
据我看来,在 database.php 中进行设置是毫无意义的,正如许多人建议的那样。
因为这种更改主要需要在开发模式下进行。因此,正确设置unix_socket的方法如下所示:
文件:.env
DB_SOCKET='/Applications/MAMP/tmp/mysql/mysql.sock'

通过上述方式,.env 已经被包含在 .gitignore 中,在您的项目远程部署时不会出现任何其他问题。

注意:我已在 Laravel 5.7 及以上版本中测试了此设置。


对我来说,在本地 Laravel 副本中连接到远程的操作无法正常工作。 - twister_void

2

找到了答案,以下是解决办法:

  • 启动MAMP
  • 在左上角,点击"MAMP" -> "偏好设置"
  • 进入"PHP"选项卡
  • 选择PHP 5.5.17(或你拥有的版本)替代默认勾选的版本(最新版MAMP中为5.6.1-> 5.5.17)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接