복붙노트

PHP - MySQL 연결이 작동하지 않음 : 2002 해당 파일이나 디렉토리가 없습니다.

PHP

PHP - MySQL 연결이 작동하지 않음 : 2002 해당 파일이나 디렉토리가 없습니다.

WordPress를 설정하려고합니다. 나는 아파치와 MySQL을 운영하고 있고, 계정과 데이터베이스는 모두 설정되어있다. 나는 간단한 연결을 만들려고 노력했다 :

<?php
    $conn = mysql_connect('localhost', 'USER', 'PASSWORD');
    if(!$conn) {
        echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
    }
?>

그리고 저는 항상 이것을 얻습니다 :

어떤 파일이나 디렉토리에 대해 이야기 할 수 있습니까?

OS X Snow Leopard에 내장 된 Apache를 사용하고 있습니다. x86_64 dmg을 사용하여 MySQL을 설치했습니다.

업데이트 : 소켓이 /tmp/mysql.sock에 있다는 것을 알았습니다. php.ini에서 잘못된 경로의 모든 항목을 바꿉니다.

해결법

  1. ==============================

    1.Linux를 사용하는 경우 : mysql.sock 파일의 경로가 잘못되었습니다. 이것은 일반적으로 (LAMPP) XAMPP를 사용하고 있으며 /tmp/mysql.sock에 있지 않기 때문에 발생합니다.

    Linux를 사용하는 경우 : mysql.sock 파일의 경로가 잘못되었습니다. 이것은 일반적으로 (LAMPP) XAMPP를 사용하고 있으며 /tmp/mysql.sock에 있지 않기 때문에 발생합니다.

    php.ini 파일을 열고이 행을 찾으십시오.

    mysql.default_socket
    

    그리고 그것을 만든다.

    mysql.default_socket = /path/to/mysql.sock
    
  2. ==============================

    2.비슷한 문제가있어서 localhost 대신 127.0.0.1을 사용하여 mysql을 처리하여 문제를 해결할 수있었습니다.

    비슷한 문제가있어서 localhost 대신 127.0.0.1을 사용하여 mysql을 처리하여 문제를 해결할 수있었습니다.

    아마 내 호스트 설정에 뭔가 잘못 됐음을 의미하지만,이 빠른 수정은 지금 당장 나에게 달려있다.

  3. ==============================

    3.이것은 Apache HTTP의 기본 설치 및 MySQL의 사용자 정의 설치가있는 Mac OS X 용입니다.

    이것은 Apache HTTP의 기본 설치 및 MySQL의 사용자 정의 설치가있는 Mac OS X 용입니다.

    그 대답은 @ alec-gorge의 훌륭한 반응에 기반을두고 있습니다. 그러나 대부분의 Mac OS X 관련 구성에서 구성해야하는 몇 가지 구체적인 변경 사항이 있었기 때문에 여기에 완벽 성을 위해 추가하겠습니다.

    /etc/apache2/httpd.conf에서 PHP5 지원이 활성화되어 있는지 확인하십시오.

    sudo vi /etc/apache2/httpd.conf (요청시 암호 입력)로 파일을 편집하고 php5_module 모듈을로드하기 위해 줄의 주석 처리를 제거하십시오.

    LoadModule php5_module libexec/apache2/libphp5.so
    

    sudo apachectl start로 Apache HTTP를 시작합니다 (이미 시작된 경우 다시 시작하고 구성 파일을 다시 읽으려면 다시 시작해야 함).

    / var / log / apache2 / error_log에 php5_module이 활성화되었음을 알리는 줄이 있는지 확인하십시오. PHP / 5.3.15 (또는 이와 비슷한 경우)가 표시됩니다.

    [notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch configured -- resuming normal operations
    

    MySQL이 시작되어 실행 중일 때 (./bin/mysqld_safe) 로그 파일을 어디에서 찾을 수 있는지 알려주는 디버그 라인이 콘솔에 출력되어야합니다. 필자의 경우 localhost라는 파일 이름에있는 호스트 이름은 구성에 따라 다를 수 있습니다.

    로깅 후 오는 파일은 중요합니다. 그것이 MySQL이 작업을 기록하는 곳입니다.

    130309 12:17:59 mysqld_safe Logging to '/Users/jacek/apps/mysql/data/localhost.err'.
    130309 12:17:59 mysqld_safe Starting mysqld daemon with databases from /Users/jacek/apps/mysql/data
    

    localhost.err 파일을 엽니 다 (다시 말하면 이름이 다를 수 있습니다). 즉, tail -1 /Users/jacek/apps/mysql/data/localhost.err을 사용하여 소켓 파일의 이름을 찾습니다. 마지막 줄에 있어야합니다.

    $ tail -1 /Users/jacek/apps/mysql/data/localhost.err
    Version: '5.5.27'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)
    

    socket : part는 php.ini에서 사용해야하는 소켓 파일이다.

    MySQL에 로그인하여 다음을 실행하여 소켓 파일 이름의 위치를 ​​결정하는 또 다른 방법이 있습니다.

    show variables like '%socket%';
    

    php.ini 말하기 ...

    / etc 디렉토리에는 /etc/php.ini.default 파일이 있습니다. /etc/php.ini에 복사하십시오.

    sudo cp /etc/php.ini.default /etc/php.ini
    

    /etc/php.ini 파일을 열고 mysql.default_socket을 찾으십시오.

    sudo vi /etc/php.ini
    

    mysql.default_socket의 기본값은 /var/mysql/mysql.sock입니다. 필자가 이전에 언급 한 값으로 변경해야한다. 필자의 경우에는 /tmp/mysql.sock이다.

    소켓 파일의 이름을 반영하도록 /etc/php.ini 파일을 대체하십시오.

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

    Apache HTTP를 다시 시작하십시오.

    sudo apachectl restart 
    

    PHP5와 관련된 오류가없는 경우 로그를 확인하십시오. 오류가 없다는 것을 의미합니다. PHP5와 MySQL은 정상적으로 작동합니다. 축하해!

  4. ==============================

    4.구성 파일 (db 연결)에서 'localhost'를 '127.0.0.1'로 바꾸면 도움이되었습니다!

    구성 파일 (db 연결)에서 'localhost'를 '127.0.0.1'로 바꾸면 도움이되었습니다!

  5. ==============================

    5.먼저, MySQL이 실행 중인지 확인하십시오. 명령어 : mysqld start

    먼저, MySQL이 실행 중인지 확인하십시오. 명령어 : mysqld start

    여전히 연결할 수없는 경우 : /etc/my.cnf는 어떻게 생겼습니까?

    2002 년 소켓 오류이기 때문에 소켓을 확인해야한다는 점에서 다른 2 개의 게시물이 정확합니다.

    LAMP 설정에 대한 훌륭한 자습서는 다음과 같습니다. http://library.linode.com/lamp-guides/centos-5.3/index-print

  6. ==============================

    6.php.ini 파일을 확인하고 mysql.default_socket이 올바르게 설정되었는지 확인하고 mysqld가 액세스 할 수있는 소켓 파일로 올바르게 구성되었는지 확인하십시오. 일반적인 기본값은 "/tmp/mysql.sock"입니다.

    php.ini 파일을 확인하고 mysql.default_socket이 올바르게 설정되었는지 확인하고 mysqld가 액세스 할 수있는 소켓 파일로 올바르게 구성되었는지 확인하십시오. 일반적인 기본값은 "/tmp/mysql.sock"입니다.

  7. ==============================

    7.그것은 당신에게 많은 도움이되지는 않지만, MySQL의 최신 버전 (그리고 최근 버전)에서 오류 코드 2002는 "소켓 [name-of-socket]"을 통해 로컬 MySQL 서버에 연결할 수 없다는 것을 의미합니다. 조금 더.

    그것은 당신에게 많은 도움이되지는 않지만, MySQL의 최신 버전 (그리고 최근 버전)에서 오류 코드 2002는 "소켓 [name-of-socket]"을 통해 로컬 MySQL 서버에 연결할 수 없다는 것을 의미합니다. 조금 더.

  8. ==============================

    8.내 경우에는 mysqli_connect에 문제가있다. 내가 연결하고 싶을 때 mysqli_connect ( 'localhost', 'myuser', 'mypassword')  mysqli_connect_error ()이 오류를 반환한다 "No such file or directory"

    내 경우에는 mysqli_connect에 문제가있다. 내가 연결하고 싶을 때 mysqli_connect ( 'localhost', 'myuser', 'mypassword')  mysqli_connect_error ()이 오류를 반환한다 "No such file or directory"

    이 일은 나를 위해 일했다. mysqli_connect ( 'localhost : 3306', 'myuser', 'mypassword')

  9. ==============================

    9.이 문제도 발생했습니다. 'localhost'를 '127.0.0.1'로 수정했습니다.

    이 문제도 발생했습니다. 'localhost'를 '127.0.0.1'로 수정했습니다.

  10. ==============================

    10.Matthias D의 답변을 여기에 확장하면 다음 명령을 사용하여 정확한 경로로 MySQL과 MariaDB 모두에서이 2002 오류를 해결할 수있었습니다.

    Matthias D의 답변을 여기에 확장하면 다음 명령을 사용하여 정확한 경로로 MySQL과 MariaDB 모두에서이 2002 오류를 해결할 수있었습니다.

    먼저 MySQL 소켓에 대한 실제 경로를 얻는다.

    netstat -ln | grep -o -m 1 '/.*mysql.sock'
    

    그런 다음 PHP 경로를 얻습니다.

    php -r 'echo ini_get("mysql.default_socket") . "\n";'
    

    이 두 명령의 출력을 사용하여 연결하십시오.

    sudo ln -s /actualpath/mysql.sock /phppath/mysql.sock
    

    예를 들어 경로가 /var/mysql/mysql.sock 인 경우와 같이 PHP mysql.sock에 대한 경로를 만드는 데 필요한 파일이나 디렉토리가 없으면 다음을 실행합니다.

    sudo mkdir -p /var/mysql
    

    그런 다음 sudo ln 명령을 다시 시도하십시오.

  11. ==============================

    11.mysql 서버를 다시 시작하면 도움이 될 수 있습니다. 제 경우에는 서버를 다시 시작하면 많은 시간을 절약 할 수있었습니다.

    mysql 서버를 다시 시작하면 도움이 될 수 있습니다. 제 경우에는 서버를 다시 시작하면 많은 시간을 절약 할 수있었습니다.

    service mysql restart
    

    추신 : 루트가 아닌 사용자의 경우 sudo service mysql restart를 사용하십시오.

  12. ==============================

    12.로컬 서버 (MAMP, XAMPP, WAMP 등)가 실행 중인지 확인하십시오.

    로컬 서버 (MAMP, XAMPP, WAMP 등)가 실행 중인지 확인하십시오.

  13. ==============================

    13.오류 2002는 MySQL이 소켓 파일 (예 : /tmp/mysql.sock)을 통해 로컬 데이터베이스 서버에 연결할 수 없음을 의미합니다.

    오류 2002는 MySQL이 소켓 파일 (예 : /tmp/mysql.sock)을 통해 로컬 데이터베이스 서버에 연결할 수 없음을 의미합니다.

    소켓 파일의 위치를 ​​찾으려면 다음을 실행하십시오.

    mysql_config --socket
    

    응용 프로그램이 올바른 유닉스 소켓 파일을 사용하는지 또는 TCP / IP 포트를 통해 연결되는지 다시 확인하십시오.

    그런 다음 PHP에 올바른 MySQL 소켓 설정이 있는지 다시 확인하십시오.

    php -i | grep mysql.default_socket
    

    파일이 존재하는지 확인하십시오.

    소켓 테스트 :

    mysql --socket=/var/mysql/mysql.sock
    

    Unix 소켓이 잘못되었거나 존재하지 않는 경우 심볼릭 링크 할 수 있습니다 (예 :

    ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock
    

    또는 설정 파일 (예 : php.ini)을 수정하십시오.

    PHP에서 직접 PDO 연결을 테스트하려면 다음을 실행하십시오.

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

    구성이 다를 수 있으므로 Apache와 CLI 사이의 구성 (명령 줄 인터페이스)도 확인하십시오.

    다음을 참조하십시오 : MySQL 연결 문제 해결

    문제를 추적하는 데 도움이되는 다른 유틸리티 / 명령 :

  14. ==============================

    14.나는 비슷한 문제가 있었다. 근본적으로 여기서 문제는 mysql이 실행되는 두 개의 인스턴스가 있다는 것입니다. A) /etc/init.d에서 실행중인 파일 B) / opt / lamp에 램프가 설치되어 있습니다. 해결책 : 1 단계 : - commnad를 사용하여 실행중인 모든 mysql 찾기 "find / | grep mysqld" 2 단계 : - mysql stop 서비스를 사용하여 /etc/init.d에서 실행중인 서비스를 종료합니다. 3 단계 : - / opt / lamp / lamp restart를 사용하여 램프 서비스를 다시 시작합니다.

    나는 비슷한 문제가 있었다. 근본적으로 여기서 문제는 mysql이 실행되는 두 개의 인스턴스가 있다는 것입니다. A) /etc/init.d에서 실행중인 파일 B) / opt / lamp에 램프가 설치되어 있습니다. 해결책 : 1 단계 : - commnad를 사용하여 실행중인 모든 mysql 찾기 "find / | grep mysqld" 2 단계 : - mysql stop 서비스를 사용하여 /etc/init.d에서 실행중인 서비스를 종료합니다. 3 단계 : - / opt / lamp / lamp restart를 사용하여 램프 서비스를 다시 시작합니다.

    당신은 잘 가야한다 :)

  15. ==============================

    15.Mac에서 모든 노력을하기 전에 시스템 환경 설정> MySQL에서 설정을 확인하십시오. MySQL 서버 인스턴스가 중지 된 이후로이 문제를 다루는 팀을 종종 경험했습니다.

    Mac에서 모든 노력을하기 전에 시스템 환경 설정> MySQL에서 설정을 확인하십시오. MySQL 서버 인스턴스가 중지 된 이후로이 문제를 다루는 팀을 종종 경험했습니다.

    Start MySQL Server 버튼을 클릭하면 마법이 일어납니다.

  16. ==============================

    16.내 서버에서 PHP-FPM 또는 여러 PHP 버전을 사용하고 있습니다. 내 경우에는 mysql 기본 소켓 매개 변수가 없기 때문에 mysqli 값을 업데이트한다.

    내 서버에서 PHP-FPM 또는 여러 PHP 버전을 사용하고 있습니다. 내 경우에는 mysql 기본 소켓 매개 변수가 없기 때문에 mysqli 값을 업데이트한다.

    mysqli.default_socket
    

    ~까지 :

    mysql.default_socket = /path/to/mysql.sock
    

    @Alec Gorge 덕분에

  17. ==============================

    17.나는 똑같은 문제가 있었다. 내 소켓은 결국 /tmp/mysql.sock에서 발견되었습니다. 그런 다음 그 경로를 php.ini에 추가했습니다. MySQL Workbench의 "Server Status"페이지에서 소켓을 찾았습니다. 소켓이 /tmp/mysql.sock에 없으면 MySQL Workbench가 그 위치를 알려줄 수 있습니까? (당신이 MySQL Workbench를 사용하면 ...)

    나는 똑같은 문제가 있었다. 내 소켓은 결국 /tmp/mysql.sock에서 발견되었습니다. 그런 다음 그 경로를 php.ini에 추가했습니다. MySQL Workbench의 "Server Status"페이지에서 소켓을 찾았습니다. 소켓이 /tmp/mysql.sock에 없으면 MySQL Workbench가 그 위치를 알려줄 수 있습니까? (당신이 MySQL Workbench를 사용하면 ...)

  18. ==============================

    18.설치 프로그램을 사용하여 MySQL을 설치했습니다. 실제로 'bin'디렉토리와 함께 데이터 디렉토리가 없습니다.

    설치 프로그램을 사용하여 MySQL을 설치했습니다. 실제로 'bin'디렉토리와 함께 데이터 디렉토리가 없습니다.

    그래서 "C : \ Program Files \ MySQL \ MySQL Server 8.0"아래에 수동으로 'data'디렉토리를 만들었습니다. 그리고 그것은 작동했습니다 (https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html에서 제안 된 단계에 따라 루트 암호를 변경).

  19. from https://stackoverflow.com/questions/1676688/php-mysql-connection-not-working-2002-no-such-file-or-directory by cc-by-sa and MIT license