SQLSTATE [HY000] [2002] Không có lỗi tệp hoặc thư mục như vậy


14

Đã có lỗi xử lý yêu cầu của bạn

SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục như vậy

Nhận được lỗi trên xin vui lòng ai đó cung cấp cho tôi giải pháp để giải quyết điều này.


Tôi đã sửa nó bằng cách thay đổi chuỗi kết nối, đảm bảo rằng mysql của bạn được bật và bạn có tất cả các bảng tồn tại trong cơ sở dữ liệu.
Touqeer Shafi

Câu trả lời:


12

Tôi gặp vấn đề tương tự khi cài đặt Magento 2.1.0 với PHP 7.0.13.
Tôi có thể giải quyết vấn đề này bằng cách đặt tên máy chủ cơ sở dữ liệu là 127.0.0.1 thay vì localhost .


Điều này nên được thực hiện ở đâu?
joeybab3

bên trong ./app/etc/env.php
Jino

10

Nếu máy chủ của bạn được liệt kê app/etc/local.xmllocalhostvà lỗi này xuất hiện trong nhật ký lỗi của Magento, nhưng Magento vẫn chạy ổn, thì mysql đã được khởi động lại và ổ cắm /tmp/mysql.sockhoặc bất kỳ tệp ổ cắm nào được thiết lập my.cnftạm thời biến mất.

Bởi vì nó bị thiếu, trình kết nối mysql PDO báo cáo SQLSTATE[HY000] [2002] No such file or directory

Nếu bạn liên tục bị lỗi này và không có quyền truy cập vào Magento ngoài trang Lỗi ngoại lệ, thì mysql đã bị sập hoàn toàn và bạn cần nhà cung cấp dịch vụ lưu trữ của mình tìm hiểu lý do và khởi động lại mysql.


6

đặt tên máy chủ cơ sở dữ liệu là 127.0.0.1 thay vì localhost.


2

Điều này cũng có thể xảy ra nếu hệ thống tập tin của bạn đã đầy ... df -h 1 ... tất nhiên, chủ yếu là bạn sẽ nhận được thông báo trước đó ...

mysqld sẽ không chạy bình thường và sẽ ở chế độ "an toàn"

HTH SNS



0

Hãy chắc chắn rằng bạn chỉnh sửa ứng dụng / etc / local.xml của bạn đúng cách. Nếu bạn không có tiền tố cho các bảng của mình, hãy đảm bảo dòng thích hợp là:

<table_prefix><![CDATA[]]></table_prefix>

KHÔNG PHẢI

<table_prefix>{{db_prefix}}</table_prefix>

0

Điều này thường được gây ra bởi một phiên bản PHP khác được sử dụng bởi dòng lệnh PHP so với máy chủ web. Cụ thể, mysql.sockcó thể bị định cấu hình sai nếu đây là trường hợp.

Để xác định xem bạn có sử dụng một phiên bản PHP hay không:

  1. Đăng nhập vào máy chủ Magento của bạn.
  2. Nhập lệnh sau:

    php -i | grep 'php.ini'

Điều này xác định các cài đặt được sử dụng bởi giao diện dòng lệnh PHP (CLI). Lưu ý nơi php.iniđược đặt.

  1. Nếu bạn chưa làm như vậy, hãy thiết lập một phpinfo.phpmáy chủ web của bạn.
  2. So sánh giá trị của tệp cấu hình được tải từ phpinfo.phpvới tệp từ php -i.

phpinfo.phphiển thị các php.initập tin được sử dụng bởi máy chủ web của bạn. Nếu nó khác với những gì trong PHP php.ini, bạn phải làm cho tất cả các cài đặt PHP nhất quán cho cả CLI PHP và máy chủ web.

Để biết thêm chi tiết, tham khảo tài liệu được cung cấp với máy chủ web của bạn.


Điều này có thể xảy ra - tôi nghĩ rằng tôi đang đối mặt với điều này ngay bây giờ. Nhưng tại sao? Bất kỳ ý tưởng cụ thể về những gì để kiểm tra trong các tập tin ini?
VladFr

4
Thay vào đó, bạn có thể cung cấp một số phép lịch sự cho trang này devdocs.magento.com/guides/v2.0/install-gde/trouble/php/ mẹo
Shan

0

Tôi có sẵn một số phiên bản PHP thông qua trình bao - gõ php và nhấn tab hiển thị những phiên bản mà trình tự động hoàn thành của tôi biết.

Đối với tôi, PHP 5.4, 5.5 và 5.6 đều hoạt động tốt, nhưng PHP 7 không tìm thấy mysql.sock và đã gặp sự cố với "SQLSTATE [HY000] [2002] Không có lỗi tệp hoặc thư mục như vậy" được thảo luận trong câu hỏi này .

# Prints [ok]
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-5.6.20

# Prints [error] and shows a warning
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-7.0.8

Để xem máy chủ mysql của bạn có ổ cắm ở đâu, hãy sử dụng lệnh này:

cat /etc/mysql/my.cnf | grep socket

Trong trường hợp của tôi, với Percona Mysql được cài đặt trong hệ thống mơ hồ của tôi, tệp ổ cắm sock đã xảy ra ở đây:

/var/run/mysqld/mysqld.sock

(lưu ý rằng nó được gọi là mysqld không chỉ đơn giản là mysql )

Tôi có một số phiên bản php để lựa chọn và các lệnh này cho tôi biết phiên bản nào có vấn đề và phiên bản nào ổn:

Câu trả lời cho tôi chỉ đơn giản là bao gồm mã trong tập lệnh của nhà cung cấp mơ hồ để tạo liên kết tượng trưng giữa /tmp/mysql.sock và /var/run/mysqld/mysqld.sock

if [ ! -L /tmp/mysql.sock ]; then
    echo "Creating symbolic link for php 7 to connect to mysql.sock"
    ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
fi

Với symlink mới, tập lệnh thử nghiệm được đưa ra trước đây hoạt động hoàn hảo cho tất cả các phiên bản PHP và tôi có thể sử dụng localhost trong mã của mình thay vì phải cung cấp địa chỉ IP 127.0.0.1 .


0

Tôi nhận được cùng một lỗi "SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục như vậy". Và thấy rằng dịch vụ MySQL đã bị dừng. Tôi đã bắt đầu dịch vụ MySQL của mình và nó hoạt động tốt.


0

Đây có vẻ là vấn đề phiên bản PHP sai, bạn cần chọn php nào phải sử dụng để chạy lệnh như sau:

/Applications/MAMP/bin/php/php7.1.20/bin/php bin/magento setup:upgrade

PS: Mẫu trên dành cho MAC, bạn cũng có thể làm tương tự cho windows hoặc unix.

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.