我有`PDOException:SQLSTATE [HY000] [2002]使用drush时没有这样的文件或目录。


21

我是第一次安装Drush(所以可能是配置错误),并且我正在尝试更新到最新的Drupal核心版本。

Drush给我这个错误-我在OSX盒子上。

dev5:clientnamedirectory my.name$ drush pm-update projects drupal-7.25
<h1>Additional uncaught exception thrown while handling exception.</h1>

<h2>Original</h2><p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in drupal_get_installed_schema_version() (line 155 of /Users/my.name/Sites/proface/includes/install.inc).</p>

<h2>Additional</h2>

<p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in system_list() (line 165 of /Users/my.name/Sites/clientnamedirectory/includes/module.inc).</p><hr />

Drush command terminated abnormally due to an unrecoverable error.

1
您完成这些步骤了吗?我知道这可能不完全是您的问题,但这可能会有所帮助。
Chapabu 2012年

您正在使用哪个版本的drush?存在一个与您似乎相同的问题:drupal.org/node/832472
F1234k 2012年

我正在使用版本drush-7.x-4.5和drupal 7.9
FLY

在问题中添加了我遵循的步骤。您正在@Chapabu摆弄类似短缝的接缝
FLY

1
你有一个PHP / MySQL的连接问题(不是Drupal的相关) - stackoverflow.com/questions/2412009/...
克莱夫

Answers:


42

这就是我在macOS上解决它的方法:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

资料来源:在Damp上使用Drush


对我来说,它正在“ / tmp”中查找mysql.sock文件。因此,我必须在其中创建一个指向我的MAMP安装的符号链接。仅供大家参考。
Patrick

37

在Drupal站点的settings.php文件中的数据库配置中,尝试将主机更改为127.0.0.1,而不是localhost。

替换默认值:'host'=>'localhost',

其中:'host'=>'127.0.0.1',

我在OS X XAMPP上遇到了此错误,但该解决方案也应在此处应用。正如Clive提到的,这是一个MySQL连接问题。 这篇文章有更多的潜在问题。


简洁而简单的解决方案。尽管它可以在每个站点上运行,但在这里却成功了。
Ignacio Segura Postigo 2015年

较流行的答案对我不起作用(我使用的是MAMP Pro),但是这个答案可以。谢谢!
凯利·库里

1
没有!这可能会使Drush起作用...但是随后导致Drupal失败
sea26.2

11

说明

错误2002 - PDOException意味着你drush无法通过套接字文件(例如连接到MySQL的本地数据库服务器/tmp/mysql.sock的配置你的)php.ini

实际上,drush这与其自身无关,它是您的PHP配置,并且可以通过以下方式重现该错误:

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

固定

如果您的MySQL正常运行,请确保以下两个文件:

  1. mysql_config --socket

    要么: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

    要么: php -r 'phpinfo();' | grep -w default_socket

匹配并指向同一个文件,它们都存在。

如果不是,请通过以下方法检查哪一个是正确的:

mysql --socket=/path/to/mysql.sock

然后通过以下解决方案之一解决问题:

  • 使符号链接指向工作的mysql.sockunix套接字(有关MAMP,请参阅Andrew答案),

    • 例如,如果您使用的是MAMP,则可以建立指向默认位置的符号链接:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • 你正确的路径pdo_mysql.default_socketmysql.default_socket或者mysqli.default_socket在你的php.ini

  • unix_socket在您settings.php$databases变量中指定,例如

    $databases['default']['default'] = array(
      // ...
      'unix_socket' => '/var/mysql/mysql.sock',

故障排除

其他边缘情况可能是:

  • 错误的权限(例如,对父文件夹的权限),
  • 你没有空间了
  • 您有多个PHP版本,请检查您使用的是哪个版本以及要更改的配置,
  • 使用XDebug进行调试:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • 或设置xdebug.show_exception_trace=1xdebug.ini
  • 调试:在OS X和上sudo dtruss -fn mysqld,在Linux和strace
  • 另请参阅:MySQL连接不起作用:2002 SO处没有此类文件或目录

6

我正在使用MAMP Pro并遇到同样的问题。我可以找到解决问题的最简单方法是将以下行添加到settings.php文件中的$ database数组中。

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

完整的看起来应该像这样:

$databases = array (
    'default' =>
     array (
        'default' =>
        array (
            'database' => 'your_database_name',
            'username' => 'username',
            'password' => 'password',
            'host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
            'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        ),
    ),
);

我得到的确切错误是这样的:

处理异常时引发的其他未捕获异常。

原版的

PDOException:SQLSTATE [HY000] [2002] drupal_is_denied()中没有这样的文件或目录(第2193行,...

额外

PDOException:SQLSTATE [HY000] [2002] _registry_check_code()中没有这样的文件或目录(第3477行,...


由于发生不可恢复的错误,Drush命令异常终止。


2
这是使用MAMP对我来说最快,最简单的修复程序
ant

3

我通过以下步骤解决了这个问题,与之前的回复类似,但不同。

添加符号链接:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

找到正在使用的php.ini:

php -i | grep php.ini

将以下设置添加到php.ini:

pdo_mysql.default_socket= /var/mysql/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock

1

这是由于您的PHP / SQL配置中的配置错误。Web服务器使用的套接字和命令行使用的套接字在某些地方进行了不同的配置。我建议检查您的MySQL配置,以查看正在使用的unix套接字,然后确保在所有php.ini配置和编译中使用相同的值。

如果您无法修复配置,则应执行以下步骤:

  1. 获取Drush 5.x的开发版本(http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz)并安装该版本。这可能会导致其他问题,但总体来说还算稳定。
  2. 在您的Drupal网站settings.php中,删除数据库连接的主机和端口设置,并添加一个'unix_socket'=>'/path/to/mysql.sock'来替换它们。

如果这一切看起来都很复杂,则可以选择将setting.php中的主机从本地主机更改为127.0.0.1。这会使站点变慢,但是对于开发站点而言,它可能并不明显或不重要。对于生产站点,您要使用unix套接字,并且应该整理配置。


这确实是它的作用。我已经测试了无数次。
asiby

1

找到了在Mac上安装drush的更简单/替代方法:

通过将其粘贴到独立终端中来安装自制软件

/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"

然后通过从同一终端运行以下命令来添加drush

brew install drush

运行冲刺状态现在运行良好。


1

如果您使用的是MySQL.com安装MySQL,则只需将PHP指向.sock文件的正确位置。

在中php.ini,添加/修改以下两行:

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

要查找您的php.ini的位置(它可能尚不存在),请使用此

php -i | grep php.ini

如果该php.ini文件尚不存在,请创建它。


0

同意其他答案,Drupal无法找到mysql套接字。其他答案对我有帮助,但是对于安装了正式的Oracle Mysql服务的安装来说还不完整。即,mysql.sock文件的默认位置。因此,以下是根据您的用例推荐的答案的摘要:

如果使用官方MAMP软件包中包含的mysql,请使用@Andrew Alexander的答案:

sudo mkdir /var/mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

对于官方的Oracle MYSQL:

sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock


0

我在终端中收到以下消息:

(MAMP专业版+ PHP 7)

Blockquote Drush命令由于不可恢复的错误而异常终止。
[错误] PDOException:SQLSTATE [HY000] [2002] Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService()Blockquote中没有此类文件或目录

我借助这些说明解决了问题


0

我忘记了我的本地mysql在唯一的端口号上运行,所以我很困惑为什么在直到在另一个本地站点上查看我的配置之前才得到这个。

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.