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]