Mac 下 Laravel 框架数据迁移出现 “No such file or directory”
前言
前几天刚从 ThinkPHP 框架转入到 Laravel 框架的学习,一路上遇到的坑真他妈的的多呀,让我怀疑人生啦。今天按照慕课网的教程,就行数据迁移,但是在我的 Mac 下出现SQLSTATE[HY000] [2002] No such file or directory
,当时很无奈啊,明明是数据库可以正常连接,但是还是出现这个问题,最后还要感谢谷歌找到了一篇解决的文章老外写的。
解决方法
首先说说我的开发环境吧,Mac 下 mamp 作为服务器,还有大名鼎鼎的 phpstrom IDE。
第一种解决方法 (最佳解决方法)
在
config/database.php
文件中的mysql
连接方法中添加unix_socket
密钥 (即为mysql.sock
所在 MAMP 路径的值)'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', ''), 'charset' => 'utf8', 'collation' => 'utf8_general_ci', 'prefix' => '', 'strict' => true, 'engine' => null, 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', ],
这样就可以完美解决啦 (当然,不同的本地服务器
unix_socket
路径不一样,详细看第二种方法啦)第二种解决方法
不要假设你的 unix_socket 会有所不同,尝试找到它
首先,获取你的 unix_socket 位置。$ mysql -uroot -p
输入您的 mysql 密码并从命令行登录您的 mysql 服务器。
mysql> show variables like '%sock%'; +-----------------------------------------+-----------------------------------------+ | Variable_name | Value | +-----------------------------------------+-----------------------------------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 230 | | socket | /Applications/MAMP/tmp/mysql/mysql.sock | +-----------------------------------------+-----------------------------------------+
此时,你可以使用第一种解决方法啦。
当然这里也有第二种解决方法:更改你的
php.ini
文件我们可以通过
phpinfo
找到php.ini
文件位置。<?php phpinfo();
这样可以得知
php.ini
的文件位置,并在此文件添加如下代码:mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock mysqli.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock pdo_mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock
然后重启你的 Apache 服务器。
第三种解决方法
有同样的问题,但它现在为我工作。
如果有任何人仍然有问题,请尝试:- 确保
bootstrap/start.php
包含您的实际主机名,而不是虚拟主机的名称。输入hostname
终端以获取您的主机名。由于它是一个阵列,我相信您可以输入您的主机名和虚拟主机的名称。 - 将
“127.0.0.1”
代替为“localhost”
说实话,我也你太懂这个什么意思 (不建议用这种方法哈)。
- 确保
第四种解决方法
这适用于我在 Laravel 5.0 中,更改. env 文件中的
DB_HOST = 127.0.0.1:33060
。
我的 MAMP 被我修改成了 3306 端口,但是用作者方法 33060 是不行的,改成用 3306 是可以解决的,在我的理解,这个应该是加个你的数据库的端口吧。第五种解决方法
在主机密钥中添加端口号。在这种情况下,MAMP 默认使用 8889; 而博主自己的已经改成是 3306 端口,所以,你要看清自己的端口号。
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost:8889', 'database' => 'essays', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
参考文章 Setting up Laravel on a Mac php artisan migrate error: No such file or directory [duplicate]