在Mac上设置Laravel php artisan迁移错误:没有这样的文件或目录
- 把一个完美的laravel项目从一个git变成了一个运行MAMP的mac。 项目在Linux机器上完美运行。
- composer php安装
-
PHP的工匠迁移,得到以下错误:
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
注意:php -v是5.5和mysql -v是从terminal5.5这里是我的config / database.php的一部分
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'essays', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
我试图用127.0.0.1replace本地主机无济于事。 请帮忙..
编辑:我在我的php.ini中添加这三行
mysql.default_socket = /var/run/mysqld/mysqld.sock mysqli.default_socket = /var/run/mysqld/mysqld.sock pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock
我也添加了这个符号链接:
sudo mkdir /var/mysql cd /var/mysql && sudo ln -s /Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
但那没有解决。 我也从git中拉出了一个新的laravel项目,并在composer install
完作者之后遇到同样的错误,然后php artisan migrate
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
mac版本是10.7.4
如果你正在使用MAMP,一定要添加一个mysql.sock
驻留在MAMPpath的值的unix_socket
键。
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', 'database' => 'database', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
不要假设你的unix_socket从一个到另一个不同,试着find它。
首先, 获取你的unix_socket位置 。
$ mysql -uroot -p
input你的mysql密码并从命令行login你的mysql服务器。
mysql> show variables like '%sock%'; +---------------+---------------------------------------+ | Variable_name | Value | +---------------+---------------------------------------+ | socket | /opt/local/var/run/mysql5/mysqld.sock | +---------------+---------------------------------------+
你的unix_soket可能是不同的。
然后你有2个解决scheme来解决你的问题:
(1)改变你的config/database.php
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'essays', 'username' => 'root', 'password' => 'root', 'unix_socket' => '/opt/local/var/run/mysql5/mysqld.sock', //Your sock got from above 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
(2)改变你的php.ini,find你的php.ini
文件
<? phpinfo();
你可能会安装许多不同版本的PHP,所以请不要假设你的php.ini文件位置,从你的'phpinfo'中获取;
改变你的php.ini:
mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock pdo_mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
然后重新启动你的apache或php-fpm。
有同样的问题,但它现在为我工作。
如果有人仍然有问题,试试这个:
- 确保你的
bootstrap/start.php
包含你的实际主机名,而不是你的虚拟主机的名字。 inputterminal中的主机名以获取您的主机名。 因为这是一个数组,我相信你可以input你的主机名和你的虚拟主机的名字。 - 将“localhost”replace为“127.0.0.1”。
如果您使用XAMPP,则解决scheme是:
'mysql' => array( 'driver' => 'mysql', 'unix_socket' => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock', 'host' => 'localhost' )
这在Laravel 5.0中适用于我,在.env文件中更改DB_HOST = 127.0.0.1:33060 。
其他答案不起作用…
对于Laravel 5.0+,在你的.env文件中将localhost
改为127.0.0.1
,然后再使用Unix Sockets进行游戏 – 这对我很有用。
Noobs要小心:对于任何使用Laravel 5并使用较老的学习资料的人来说,请注意文件夹结构与以前的版本有相当大的转变,虽然这似乎是更好的,请查看本文https://mattstauffer.co/blog /laravel-5.0-directory-structure-and-namespace
另一种解决scheme是在主机密钥中添加端口号。 在这种情况下,MAMP默认使用8889:
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost:8889', 'database' => 'essays', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
如果你正在使用Laravle 5.1.11版本+ MAC + MAMPP
你必须在文件“yourapp”/app/config/database.php中添加“Unix_socket”
'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, ],
Unix_socket参数被添加到上面的mysqlconfiguration驱动器。