Đã 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.
Đã 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.
Câu trả lời:
Nếu máy chủ của bạn được liệt kê app/etc/local.xml
là localhost
và 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.sock
hoặc bất kỳ tệp ổ cắm nào được thiết lập my.cnf
tạ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.
Đ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
Tôi đã có vấn đề tương tự, và tôi đã sử dụng bên dưới để chọn php nào phải sử dụng. /usr/local/etc/php/7.2/bin/php bin/magento setup:di:compile
Xem tài liệu chính thức: SQLSTATE [HY000] [2002] Không có tệp hoặc thư mục như vậy
Đ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.sock
có 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:
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.
phpinfo.php
máy chủ web của bạn.phpinfo.php
với tệp từ php -i
.phpinfo.php
hiển thị các php.ini
tậ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.
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 .