Tôi đã có `PDOException: SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục nào như vậy khi sử dụng drush [shut]


21

Tôi đã cài đặt Drush lần đầu tiên (vì vậy đây có thể là lỗi cấu hình) và tôi đang cố cập nhật lên phiên bản lõi mới nhất của Drupal.

Drush đang đưa ra lỗi này - Tôi đang sử dụng hộp 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
Bạn đã hoàn thành các bước này ? Tôi biết nó có thể không chính xác là vấn đề của bạn, nhưng nó có thể giúp đỡ.
Chapabu

Phiên bản nào của drush bạn đang sử dụng? Có một vấn đề dường như giống hệt với bạn: drupal.org/node/832472
F1234k

Tôi đang sử dụng phiên bản drush-7.x-4.5 và drupal 7.9
FLY

thêm các bước mà tôi làm theo câu hỏi của tôi Các đường may giống như các bẫy tương tự mà bạn đang sugessting @Chapabu
FLY

1
Bạn gặp vấn đề về kết nối PHP / MySQL (không liên quan đến Drupal) - stackoverflow.com/questions/2412009/iêu
Clive

Câu trả lời:


42

Đây là cách tôi giải quyết nó trên macOS:

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

Nguồn: Làm việc với Drush trên Mamp .


Đối với tôi, nó đang tìm kiếm "/ tmp" cho tệp mysql.sock. Vì vậy, tôi đã phải tạo một liên kết tượng trưng trong đó để cài đặt MAMP của tôi. Chỉ cần FYI cho bất cứ ai chạy vào đó.
Patrick

37

Trong cấu hình cơ sở dữ liệu của bạn trong tệp settings.php cho trang web Drupal, hãy thử thay đổi máy chủ thành 127.0.0.1 thay vì localhost.

thay thế mặc định: 'host' => 'localhost',

với: 'máy chủ' => '127.0.0.1',

Tôi đã gặp lỗi này trên OS X XAMPP, nhưng giải pháp cũng nên được áp dụng ở đây. Như Clive đã đề cập, đây là một vấn đề kết nối MySQL. Bài đăng này có nhiều hơn về các vấn đề cơ bản.


Giải pháp gọn gàng và đơn giản. Mặc dù vậy, nó hoạt động trên cơ sở từng trang web, nhưng nó đã tạo ra mánh khóe ở đây.
Ignacio Segura Postigo

Câu trả lời phổ biến hơn không phù hợp với tôi (Tôi đang sử dụng MAMP Pro), nhưng câu trả lời này thì có. Cảm ơn!
Kelley Curry

1
Không! Điều này có thể khiến Drush hoạt động ... nhưng sau đó khiến Drupal thất bại
sea26.2

11

Giải trình

Các PDOException - Lỗi 2002 phương tiện mà drush của bạn không thể kết nối đến máy chủ cơ sở dữ liệu địa phương MySQL thông qua các tập tin ổ cắm (ví dụ /tmp/mysql.sock) như cấu hình trong bạn php.ini.

Điều này thực sự không liên quan nhiều đến drushbản thân nó, đó là cấu hình PHP của bạn và lỗi đó có thể được sao chép bởi:

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

Sửa chữa

Nếu MySQL của bạn hoạt động chính xác, hãy đảm bảo hai tệp này:

  1. mysql_config --socket

    hoặc là: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

    hoặc là: php -r 'phpinfo();' | grep -w default_socket

phù hợp và trỏ đến cùng một tệp và cả hai đều tồn tại.

Nếu không, hãy kiểm tra xem cái nào đúng:

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

sau đó khắc phục sự cố bằng một trong các giải pháp sau:

  • tạo liên kết tượng trưng để trỏ đến mysql.sockổ cắm unix đang hoạt động (đối với MAMP, xem câu trả lời của Andrew ),

    • ví dụ: nếu bạn đang sử dụng MAMP, bạn có thể tạo một liên kết tượng trưng đến vị trí mặc định:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • con đường chính xác của bạn pdo_mysql.default_socket, mysql.default_sockethoặc mysqli.default_sockettrong của bạnphp.ini

  • xác định unix_sockettrong biến settings.phpcủa bạn $databases, ví dụ

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

Xử lý sự cố

Các trường hợp cạnh khác có thể là:

  • quyền sai (ví dụ: các thư mục mẹ),
  • bạn ra khỏi không gian
  • bạn có nhiều phiên bản PHP, kiểm tra chính xác bạn đang sử dụng và cấu hình nào bạn đang thay đổi,
  • Gỡ lỗi với XDebug:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • hoặc đặt xdebug.show_exception_trace=1trong của bạnxdebug.ini
  • Gỡ lỗi: trên OS X với sudo dtruss -fn mysqld, trên Linux vớistrace
  • Xem thêm: Kết nối MySQL không hoạt động: 2002 Không có tệp hoặc thư mục như vậy tại SO

6

Tôi đang sử dụng MAMP Pro và gặp vấn đề tương tự. Cách dễ nhất tôi có thể tìm thấy để khắc phục nó là thêm dòng sau vào mảng cơ sở dữ liệu $ của bạn trong tệp settings.php.

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

Trong toàn bộ nó sẽ trông như thế này:

$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',
        ),
    ),
);

Lỗi chính xác tôi đã nhận được như thế này:

Ngoại lệ chưa được ném thêm trong khi xử lý ngoại lệ.

Nguyên

PDOException: SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục như vậy trong drupal_is_denied () (dòng 2193 của ...

Bổ sung

PDOException: SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục như vậy trong _registry_check_code () (dòng 3477 của ...


Lệnh Drush bị chấm dứt bất thường do một lỗi không thể phục hồi.


2
đây là cách khắc phục nhanh nhất và dễ dàng nhất đối với tôi khi sử dụng MAMP
ant

3

Tôi đã giải quyết điều này bằng các bước sau, tương tự như các câu trả lời trước nhưng không giống nhau.

Thêm một liên kết tượng trưng:

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

Tìm php.ini đang được sử dụng:

php -i | grep php.ini

Thêm các cài đặt sau vào 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

Điều này là do lỗi cấu hình trong các cấu hình PHP / SQL của bạn. Ở đâu đó ổ cắm mà máy chủ web của bạn sử dụng và dòng lệnh sử dụng được cấu hình khác nhau. Tôi khuyên bạn nên kiểm tra cấu hình MySQL của bạn để xem ổ cắm unix nào đang được sử dụng và sau đó đảm bảo cùng một giá trị được sử dụng trong tất cả các cấu hình và biên dịch php.ini.

Nếu bạn không thể sửa cấu hình, các bước sau sẽ hoạt động:

  1. Nhận phiên bản phát triển của Drush 5.x (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) và cài đặt thay thế. Điều này có thể gây ra các vấn đề khác, nhưng nhìn chung nó khá ổn định.
  2. Trong cài đặt trang web Drupal của bạn, hãy xóa cài đặt máy chủ và cổng cho kết nối cơ sở dữ liệu và thêm vào một 'unix_socket' => '/path/to/mysql.sock' để thay thế chúng.

Nếu tất cả điều này có vẻ phức tạp, một giải pháp thay thế là thay đổi máy chủ trong settings.php từ localhost thành 127.0.0.1. Điều này sẽ làm cho trang web chậm hơn, nhưng đối với một trang web phát triển, nó có thể không đáng chú ý hoặc quan trọng. Đối với một trang web sản xuất, bạn muốn sử dụng ổ cắm unix và nên sắp xếp cấu hình.


Đây thực sự là những gì nó làm. Tôi đã thử nó vô số lần.
asiby

1

Tìm thấy một cách dễ dàng hơn / thay thế để cài đặt drush trên máy Mac:

Cài đặt homebrew bằng cách dán cái này trong một thiết bị đầu cuối độc lập

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

Sau đó thêm drush bằng cách chạy các mục sau từ cùng một thiết bị đầu cuối

brew install drush

Chạy trạng thái drush chạy tốt bây giờ.


1

Nếu bạn đang làm việc với cài đặt MySQL.com của MySQL, bạn chỉ cần trỏ PHP vào đúng vị trí của .socktệp.

Trong của bạn php.ini, thêm / sửa đổi hai dòng này:

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

Để tìm vị trí của php.ini của bạn (có thể chưa tồn tại), hãy sử dụng vị trí này

php -i | grep php.ini

Nếu php.initập tin chưa tồn tại ở đó, hãy tạo nó.


0

Đồng ý với các câu trả lời khác rằng Drupal không thể tìm thấy ổ cắm mysql. Các câu trả lời khác đã giúp tôi nhưng chưa hoàn tất để cài đặt với dịch vụ Oracle Mysql chính thức được cài đặt. Cụ thể, vị trí mặc định của tệp mysql.sock. Vì vậy, đây là một bản tóm tắt các câu trả lời được đề nghị của tôi tùy thuộc vào trường hợp sử dụng của bạn:

Nếu sử dụng mysql như được bao gồm bởi gói MAMP chính thức, hãy sử dụng câu trả lời của @Andrew Alexandeller:

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

Đối với Oracle MYSQL chính thức:

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

0

Đối với thiết lập MAMP 4, giải pháp đã kiểm tra "Làm cho phiên bản này có sẵn trên dòng lệnh."

Cấu hình MAMP


0

Tôi nhận được thông báo sau trong thiết bị đầu cuối:

(MAMP PRO + PHP 7)

Lệnh Blockquote Drush bị chấm dứt bất thường do lỗi không thể phục hồi.
[error] PDOException: SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục như vậy trong Drupal \ Element \ DependencyInjection \ PhpArrayContainer-> createService () Blockquote

Tôi đã giải quyết vấn đề với sự trợ giúp của các hướng dẫn này


0

Tôi quên rằng mysql cục bộ của tôi chạy trên một số cổng duy nhất vì vậy tôi đã bối rối tại sao tôi lại nhận được điều này cho đến khi tôi xem lại cấu hình của mình trên một trang web địa phương khác.

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.