我相信我已成功将我的(非常基本的)站点部署到fortrabbit,但是一旦我连接到SSH运行一些命令(例如php artisan migrate
或php artisan db:seed
),我收到一条错误消息:
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
在某些时候,迁移必须有效,因为我的桌子在那里 - 但这并不能解释为什么它现在不适合我.
错误消息表明尝试通过套接字连接MySQL(不支持).
在Laravel(工匠)的背景下,您可能想要使用不同的/正确的环境.例如:( php artisan migrate --env=production
或任何环境).看到这里.
我正在运行MAMP Pro并且在尝试迁移时遇到类似的问题(创建数据库表).尝试了一些这些提到的建议,但没有为我做.
所以,简单地说(在一小时谷歌搜索后),我向/config/database.php添加了两件事.
'port' => '1234', 'unix_socket' => '/path/to/my/socket/mysqld.sock'
现在工作正常!
@stuyam的答案为我解决了"没有这样的文件或目录"的问题
简答:将/app/config/database.php文件中的"host"从"localhost"更改为"127.0.0.1"
但后来我遇到了"拒绝连接"错误.如果有人有同样的问题,我的解决方案是更新app/config/local/database.php文件,使端口为8889:
'mysql' => array( 'driver' => 'mysql', 'host' => '127.0.0.1', 'port' => '8889', 'database' => 'databaseName', 'username' => 'root', 'password' => 'root', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
Laravel 4:将
app/config/database.php
文件中的"host" 从"localhost"更改为"127.0.0.1"Laravel 5:将
.env
文件中的"DB_HOST" 从"localhost"更改为"127.0.0.1"
我有同样的问题.上述解决方案均不适合我.我通过将/app/config/database.php文件中的"host"从"localhost"更改为"127.0.0.1"来解决了这个问题.
不确定为什么"localhost"默认不起作用,但我在symfony2帖子中找到了类似问题中的答案./sf/ask/17360801/
更新: 有人问过为什么这个修复工作正常,所以我对这个主题进行了一些研究.好像他们使用不同的连接类型,如本文所述:/sf/ask/17360801/
这里出现的问题是"localhost"使用UNIX套接字,无法在标准目录中找到该数据库.但是"127.0.0.1"使用TCP(传输控制协议),这实际上意味着它通过计算机上的"本地Internet"运行,在这种情况下比UNIX套接字更可靠.
它的工作后,我从改变DB_HOST=localhost
到DB_HOST=127.0.0.1
在.ENV文件
找到你的unix_socket的路径,这样就可以了 netstat -ln | grep mysql
你应该得到这样的东西
unix 2 [ ACC ] STREAM LISTENING 17397 /var/run/mysqld/mysqld.sock
把它添加到你的unix_socket参数中
'mysql' => array( 'driver' => 'mysql', 'host' => '67.25.71.187', 'database' => 'dbname', 'username' => 'username', 'password' => '***', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'unix_socket' => '/var/run/mysqld/mysqld.sock' <----- ), ),
希望能帮助到你 !!
在database.php文件中添加mysql.sock路径,如下例所示
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
Eample
'mysql' => [ 'driver' => 'mysql', 'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '8889'),
这是因为PDO特别对待"localhost"主机:
注意:仅限Unix:当主机名设置为"localhost"时,通过域套接字与服务器建立连接.如果针对libmysqlclient编译PDO_MYSQL,则套接字文件的位置位于libmysqlclient的编译位置.如果针对mysqlnd编译PDO_MYSQL,则可以通过pdo_mysql.default_socket设置设置默认套接字.
(来自http://php.net/manual/en/ref.pdo-mysql.connection.php)
将localhost更改为127.0.0.1将"强制"使用TCP.
注意:mysqli_connect与localhost一起正常工作.
建立在@dcarrith的答案之上......
我没有编辑配置文件,而是在PHP看起来连接到真正的mysql.sock的位置创建了一个别名.(来源)
只需运行这两个命令(无需重启):
mkdir /var/mysql ln -s /tmp/mysql.sock /var/mysql/mysql.sock
我[PDOException] SQLSTATE[HY000] [2002] No such file or directory
出于不同的原因遇到了错误.我刚刚在Ubuntu 12.04上用Apache 2.4.7,PHP v5.5.10和MySQL 5.6.16构建了一个全新的LAMP堆栈.我把我的网站搬回来并将它们解雇了.但是,由于[PDOException]
上述原因,我无法加载基于Laravel 4.2.x的站点.所以,我检查php -i | grep pdo
并注意到这一行:
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
但是,在我的/etc/my.cnf中,sock文件实际上是在/var/run/mysqld/mysqld.sock
.
所以,我打开了我的php.ini并设置了值pdo_mysql.default_socket
:
pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
然后,我重新启动了apache并检查php -i | grep pdo
:
pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock
这为我解决了这个问题.
如果您使用的是Laravel Homestead,请确保在服务器上调用命令.
homestead ssh
然后只需cd到正确的目录并在那里激活你的命令.
Mamp用户启用选项允许网络访问MYSQL
我遇到了同样的问题,我正在运行Mac OS X 10.10 Yosemite.我启用了操作系统附带的Apache Server和PHP.然后我只是配置了mCrypt库来开始.在那之后,当我使用模型和DB时,我得到了错误:
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
我找到的原因仅仅是因为PHP和MySQL无法自己连接.为了解决这个问题,我按照以下步骤操作:
打开终端并使用以下命令连接到mysql:
laravel
它会询问您相关的密码.然后,一旦你得到mysql promt键入下一个命令:
laravel
你会得到这样的东西:
laravel
保留最后一行的值:
laravel
在laravel项目文件夹中,查找database.php文件,您可以在其中配置数据库连接参数.在mysql部分中添加最后一行:
laravel
你必须有这样的东西:
laravel
现在只需保存更改,并重新加载页面,它必须工作!我希望它可能有用!
在我的情况下,我没有任何问题,只是忘了启动mysql服务...
sudo服务mysqld启动