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.1
localhost
.
호스트 설정에 문제가 있는 것 같습니다만, 이 퀵 픽스로, 지금 바로 진행할 수 있게 되었습니다.
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 to
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:
- 이입니다. - 이 부분은 파일입니다. - 이 부분은 소켓 파일입니다.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.ini
mysql.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 소켓파일을 사용하여 접속하려고 합니다. 프로그램을가 있는 를 들면, 「」를 지정한다).
--port
option, 포토 번호, 붙여진 파일를 들면, option)을 합니다.--socket
옵션)을 클릭합니다.
기타 문제 추적에 도움이 되는 유틸리티/명령어:
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 > MySQL
그 The 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
'programing' 카테고리의 다른 글
PHP - 스트림을 열지 못했습니다. 해당 파일 또는 디렉터리가 없습니다. (0) | 2022.09.12 |
---|---|
Seaborn 상자 그림에 제목을 추가하는 방법 (0) | 2022.09.12 |
HTML 문서의 문자 인코딩이 선언되지 않았습니다. (0) | 2022.09.12 |
Java: 정적 초기화 블록은 언제 유용합니까? (0) | 2022.09.12 |
Django에 유니코드 문자열을 저장할 때 MySQL "잘못된 문자열 값" 오류가 발생함 (0) | 2022.09.11 |