programing

MySQL 연결이 작동하지 않음: 2002 해당 파일 또는 디렉터리가 없습니다.

randomtip 2022. 9. 12. 11:14
반응형

MySQL 연결이 작동하지 않음: 2002 해당 파일 또는 디렉터리가 없습니다.

워드프레스를 설치하려고 합니다.Apache와 MySQL을 실행하고 있으며 계정과 데이터베이스가 모두 설정되어 있습니다.간단한 연결을 시도했습니다.

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

그리고 난 항상 이런 말을 듣죠

오류: 2002 - 해당 파일 또는 디렉토리가 없습니다.

어떤 파일이나 디렉토리를 말하는 걸까요?

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

업데이트: 소켓이 /tmp/mysql.sock에 있는 것을 발견했기 때문에 php.ini에서는 잘못된 패스가 발생하는 모든 것을 그 패스로 대체했습니다.

도 같은 을 mysql로 을 해서 할 수 .127.0.0.1localhost.

호스트 설정에 문제가 있는 것 같습니다만, 이 퀵 픽스로, 지금 바로 진행할 수 있게 되었습니다.

Linux를 사용하는 경우: mysql.sock 파일의 경로가 잘못되었습니다.이는 보통 (LAMPP) XAMPP를 사용하고 있지만 /tmp/mysql.sock에 존재하지 않기 때문입니다.

php.ini 파일을 열고 다음 행을 찾습니다.

mysql.default_socket

그리고 그것을 만들어라

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

는 Apache HTTP 네이티브 설치 및 MySQL 사용자 지정 설치가 포함된 Mac OS X용입니다.

이 답변은 @alec-gorge의 뛰어난 응답에 기초하고 있습니다.다만, 제 설정으로 설정하기 위해서, 몇개의 변경을 구글로 검색해 주세요(주로 Mac OS X 전용).완전성을 위해서 여기에 추가하려고 합니다.

Apache HTTP에 대한 PHP5 지원 사용

PHP5에서 되어 합니다./etc/apache2/httpd.conf.

「」로 합니다.sudo vi /etc/apache2/httpd.conf 시 ) (삭제(삭제));php5_module을 로드하는 행부터)을 클릭합니다.

LoadModule php5_module libexec/apache2/libphp5.so

Apache HTTP 를 사용하여 를 합니다.sudo apachectl start (오류)restart컨피규레이션파일을 재읽기 위해서 재기동할 필요가 있는 경우).

「 」가 되어 것을 확인합니다./var/log/apache2/error_log.「 php5 _ diagness 」를 해 주세요.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이 경우 설정에 따라 다를 수 있습니다.

Logging toMySQL을 사용하다

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:- 이입니다. - 이 부분은 파일입니다. - 이 부분은 소켓 파일입니다.php.ini.

MySQL에 로그인하여 다음 작업을 실행하여 소켓의 파일 이름 위치를 확인할 수 있는 다른 방법이 있습니다.

show variables like '%socket%';

MySQL 지원으로 PHP5 구성 - /etc/php.ini

php.ini 얘기가 나와서 말인데...

»/etc디렉토리에는 /etc/syslog.ini.default 파일이 있습니다./etc/php.ini에 복사합니다.

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

./etc/php.inimysql.default_sysql을 찾습니다.

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와 관련된 오류가 없는 경우 로그를 확인합니다.오류가 없다는 것은 작업이 완료되었음을 의미하며 MySQL을 사용한 PHP5는 정상적으로 작동합니다.축하드립니다.

mysql 서버를 재시작하면 도움이 될 수 있습니다.제 경우 서버를 재시작하면 시간이 많이 절약됩니다.

service mysql restart

- " - " 를 사용합니다.sudo service mysql restart를 참조해 주세요.

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

먼저 MySQL이 실행 중인지 확인합니다.명령어: mysqld start

그래도 접속할 수 없는 경우는, 다음과 같이 하십시오./etc/my.cnf는 어떻게 생겼습니까?(또는 /etc/msyql/my.cnf)

2002는 소켓에러이므로 소켓을 체크할 필요가 있다는 점에서 다른 2개의 포스트는 정확합니다.

LAMP 설정에 관한 훌륭한 튜토리얼은 http://library.linode.com/lamp-guides/centos-5.3/index-print 입니다.

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

먼저 MySQL 소켓에 대한 실제 경로를 가져옵니다.

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

그런 다음 PHP 경로를 가져옵니다.

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

다음 2개의 명령어의 출력을 사용하여 링크합니다.

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

이 「」를 반환하는 .No such file or directory 경로가 "PHP .sock"인 PHP mysql.sock 경로를 ./var/mysql/mysql.sock실행할 수 있습니다.

sudo mkdir -p /var/mysql

그런 다음 sudo ln 명령을 다시 시도합니다.

별로 도움이 되지는 않지만 최근 MySQL 버전에서는 오류 코드 2002가 "소켓 [이름 오브 소켓]을 통해 로컬 MySQL 서버에 연결할 수 없음"을 의미하므로 더 많은 것을 알 수 있습니다.

php.ini 파일을 체크하여 mysql.default_socket이 올바르게 설정되어 있는지 확인하고 mysqld가 액세스 가능한 소켓파일로 올바르게 설정되어 있는지 확인합니다.일반적인 기본값은 "/tmp/mysql.sock"입니다.

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

mysqli_connect 라고 합니다.
하고 때
mysqli_connect('localhost', 'myuser','mypassword')
는 "directory" mysqli_connect_error() "No such file or directory"라는 합니다.

은 나에게 가 있었다.mysqli_connect('localhost:3306', 'myuser','mypassword')

는 MySQL이 MySQL 2002)을 통해 서버에 수 없음을 합니다./tmp/mysql.sock를 참조해 주세요.

소켓 파일의 위치를 확인하려면 다음을 수행합니다.

mysql_config --socket

그런 다음 응용 프로그램이 올바른 Unix 소켓파일을 사용하고 있는지 다시 한 번 확인하거나 TCP/IP 포트를 통해 연결합니다.

그런 다음 PHP가 올바른 MySQL 소켓을 설정했는지 다시 한 번 확인합니다.

php -i | grep mysql.default_socket

파일이 존재하는지 확인합니다.

소켓을 테스트합니다.

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

유닉스 소켓이 잘못되었거나 존재하지 않는 경우 다음과 같이 심볼링크를 할 수 있습니다.

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(명령줄 인터페이스) 간의 구성도 확인하십시오.

서버가 실행 중일 수 있지만 서버가 수신하고 있는 것과는 다른 TCP/IP 포트, 이름 있는 파이프 또는 Unix 소켓파일을 사용하여 접속하려고 합니다. 프로그램을가 있는 를 들면, 「」를 지정한다).--portoption, 포토 번호, 붙여진 파일를 들면, option)을 합니다.--socket옵션)을 클릭합니다.

참조: MySQL 접속 문제 문제 슈팅


기타 문제 추적에 도움이 되는 유틸리티/명령어:

  • mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
  • netstat -ln | grep mysql
  • php -r "phpinfo();" | grep mysql
  • php -i | grep mysql
  • 와 함께 를 사용합니다.xdebug.show_exception_trace=1 안에서xdebug.ini
  • 에서 OS X를 시험해 보겠습니다.sudo dtruss -fn mysqld 시, " " " "strace
  • Unix 켓 unix unix unix unix unix unix unix unix unix unix unix unix unix unix unix unix.stat $(mysql_config --socket)빈 경우(예: 빈 이 있는 경우df -h를 참조해 주세요.
  • MySQL을 재시작합니다.
  • [ Check 。

로컬 서버(MAMP, XAMPP, WAMP 등)를 확인합니다.)가 실행되고 있습니다.

답변이 늦어질 수도 있지만, 문제를 해결한 것은 mysql-server를 설치하는 것이었습니다.

sudo apt-get install mysql-server

5시간 이상을 소비한 후, 나는 이 해결책을 찾았고, 그것은 내가 일을 진행하는데 도움을 주었다.만약 상위 정답이 도움이 되지 않는다면, 이것이 누군가에게 도움이 되기를 바란다.

Digital Ocean MySql 2002-no-such-file-or-directory

의 이 을 추가합니다./etc/mysql/my.cnf

[mysqld]
innodb_force_recovery = 1

MySql 재시작

service mysql restart

먼저 MySQL 서버가 실행 중인지 여부를 확인합니다. 실행 중일 경우 명령줄을 통해 MySQL에 로그인하여 소켓 경로를 확인합니다.

mysql - uUSER - pPASSWORD

그리고나서

'display'와 같은 변수 표시;

mysql 소켓 경로는 다음과 같은 연결 문자열에서 사용할 수 있습니다.

$sqli=mysqli_connect('localhost', 'USER', 'PASSWORD', 'path of socket file' ;

MySQL이 실행되고 있지 않은 경우.그럼 트러블 슈팅에 필요한 에러 로그를 공유해 주세요.

저도 비슷한 문제가 있었어요.
기본적으로 여기서 문제는 실행 중인 mysql 인스턴스가 두 개 있을 수 있다는 것입니다.
/etcd A) /etc/init에서되는 것.d'd's 'd's 'd's 's'
/lamp B)에 .

1 : - "find / | 를 mysql 실행 합니다.commnad "find / | grep mysqld"는 "find / | grep mysqld"입니다.
2 : stop " 2 : service mysql stop " " " /etc/init 를 사용하여 / 에서 실행.ᄃ자
3 : - / restart /3 : - //lamp/lamp restart를 사용하여 를 재시작합니다.

가셔도 됩니다. :)

모든 하기 전에 Mac 설정을 .System Preferences > MySQLThe MySQL Server Instance is stopped.

하다를 합니다.Start MySQL Server튼,, 그그그마 마다다다다다다

서버에서 PHP-FPM 또는 여러 php 버전을 사용하고 있습니다.mysql 디폴트소켓 파라미터가 없기 때문에 mysqli 값을 갱신합니다.

mysqli.default_socket

대상:

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

@Alex Gorge 덕분에

저도 같은 문제가 있었어요.소켓은 결국 /tmp/mysql.sock에 있습니다.그런 다음 php.ini에 경로를 추가했습니다.MySQL Workbench의 "Server Status" 페이지에서 소켓을 찾았습니다.소켓이 /tmp/mysql.sock에 없는 경우 MySQL Workbench가 어디에 있는지 알려줄 수 있습니까? (MySQL Workbench를 사용하는 것이 좋습니다.)

설치 관리자를 사용하여 MySQL을 설치했습니다.실제로 'bin' 디렉토리 옆에 데이터 디렉토리가 없었습니다.

그래서 수동으로 "C:" 아래에 "data" 디렉토리를 만들었습니다.\Program Files\MySQL\MySQL Server 8.0인치.https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html에서 제안하는 절차에 따라 루트 비밀번호를 변경함으로써 동작했습니다.

mariadb 서비스 활성화 및 시작

sudo systemctl mariadb를 활성화합니다.서비스

sudo systemctl start mariadb.서비스

언급URL : https://stackoverflow.com/questions/1676688/mysql-connection-not-working-2002-no-such-file-or-directory

반응형