답변:
PHP 7.0.13과 함께 Magento 2.1.0을 설치하는 동안 동일한 문제가 발생했습니다.
데이터베이스 호스트 이름 을 localhost 대신 127.0.0.1 로 설정하여이 문제를 해결할 수 있습니다.
에 나열된 서버가있는 경우 app/etc/local.xml
이며 localhost
이 오류가 젠토의 오류 로그에 나타납니다,하지만 젠토는 아직 확인을 실행 한 후 MySQL을 다시 시작했다 소켓 /tmp/mysql.sock
또는 어떤 소켓 파일이 설정되어 my.cnf
일시적으로 사라졌다.
누락되었으므로 PDO mysql 커넥터가보고합니다. SQLSTATE[HY000] [2002] No such file or directory
이 오류가 계속 발생하고 예외 오류 페이지에서 Magento에 액세스 할 수없는 경우 mysql이 완전히 중단 된 것이므로 호스팅 공급자가 이유를 찾아 mysql을 다시 시작해야합니다.
나는이 같은 문제가 있었고 아래에서 어떤 PHP를 사용 해야하는지 선택했다. /usr/local/etc/php/7.2/bin/php bin/magento setup:di:compile
공식 문서를 참조하십시오 : SQLSTATE [HY000] [2002] 해당 파일 또는 디렉토리 없음
이것은 일반적으로 웹 서버와 비교하여 PHP 명령 행에서 다른 PHP 인스턴스를 사용하기 때문입니다. 특히이 mysql.sock
경우 잘못 구성 될 수 있습니다.
하나의 PHP 인스턴스를 사용하고 있는지 확인하려면 :
다음 명령을 입력하십시오 :
php -i | grep 'php.ini'
PHP 명령 행 인터페이스 (CLI)에서 사용되는 설정을 결정합니다. 어디에 있는지 확인하십시오 php.ini
.
phpinfo.php
웹 서버에서 설정 하십시오.phpinfo.php
의 하나 php -i
.phpinfo.php
php.ini
웹 서버에서 사용 하는 파일을 보여줍니다 . PHP의 내용과 다른 경우 php.ini
PHP CLI 및 웹 서버 모두에 대해 모든 PHP 설정을 일관성있게 만들어야합니다.
자세한 내용은 웹 서버와 함께 제공된 설명서를 참조하십시오.
쉘을 통해 여러 버전의 PHP를 사용할 수 있습니다. php를 하고 탭을 누르면 자동 완성 기능에 대해 알 수 있습니다.
나에게 PHP 5.4, 5.5 및 5.6은 모두 제대로 작동했지만 PHP 7은 mysql.sock을 찾지 못하고 "SQLSTATE [HY000] [2002] 해당 파일 또는 디렉토리 오류가 없습니다" 와 충돌했습니다. 질문에서 논의 된 .
# 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
mysql 서버의 소켓 위치를 확인하려면 다음 명령을 사용하십시오.
cat /etc/mysql/my.cnf | grep socket
필자의 경우 Percona Mysql을 내 유랑 시스템에 설치하면 양말 소켓 파일이 여기에 생겼습니다.
/var/run/mysqld/mysqld.sock
( 단순히 mysql이 아니라 mysqld 라고 함에 유의하십시오. )
선택할 수있는 여러 버전의 PHP가 있으며이 명령은 어느 것이 문제가 있고 어떤 것이 좋았는지 보여줍니다.
나에게 대한 대답은 단순히 vagrant provisioner 스크립트에 코드를 포함시켜 /tmp/mysql.sock과 /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
새로운 심볼릭 링크를 사용하면 이전에 제공된 테스트 스크립트가 모든 PHP 버전에서 완벽하게 작동 하며 127.0.0.1 IP 주소 를 제공하는 대신 코드에서 localhost 를 사용할 수 있습니다 .