경고: mysql_connect(): [2002]에 이러한 파일 또는 디렉토리가 없습니다(unix:///tmp/mysql.sock 경유로 접속하려고 합니다).
Apple(PHP)에서 터미널을 사용하여 MySQL DB에 연결하려고 합니다.
어제는 정상적으로 작동했는데, 갑자기 제목에 오류가 생겼어요.
이 스크립트는 브라우저를 사용하여 실행(XAMPP가 설치되어 있음)할 때 작동하지만 터미널이 DB 연결을 거부합니다.
다음은 연결하기 위해 포함하는 파일입니다(이것을 포함하지 않으면 스크립트가 작동하지만 DB에 연결되지 않음).
<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("FNB1C_data") or die(mysql_error());
?>
내 브라우저에서도 작동하니까 잘 될 거야.
는 " " " 입니다.php scriptname.php
.
어떤 이유로 OS X의 mysql은 필요한 소켓파일의 위치를 잘못 취득하고 있습니다만, 다행히 심볼릭링크를 설정하는 것만으로 해결이 간단합니다.
은 '하다'로 할 수 ./tmp/mysql.sock
★★★★★★★★★★★★★★★★★」/var/mysql/mysql.sock
하나 이상의 앱이 다른 위치를 찾고 있습니다.하다
ls -l /tmp/mysql.sock /var/mysql/mysql.sock
소켓을 이동하거나 구성 파일을 편집하거나 편집한 파일을 경로가 올바른 서버에서 멀리 떨어진 로컬로 보관하는 대신 심볼릭 링크를 만들어 Mac이 잘못된 위치를 찾더라도 필요한 소켓을 찾을 수 있도록 하십시오.
「 」가 /tmp/mysql.sock
, 안 된다/var/mysql/mysql.sock
★★★★★★★★★★★★。
cd /var
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock
「 」가 /var/mysql/mysql.sock
, 안 된다/tmp/mysql.sock
★★★★★★★★★★★★。
cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock
디렉토리와 링크를 작성하려면 권한이 필요하므로 필요에 따라 위의 명령어 앞에 sudo를 붙입니다.
저도 이 오류가 있었습니다만, 여기의 제안을 통해서만 수정할 수 있었습니다.
요약하면 다음과 같습니다.
127.0.0.1
대신:
localhost
그 이유는 "localhost"가 MySQL 드라이버의 특별한 이름이기 때문에 TCP 소켓 대신 UNIX 소켓을 사용하여 MySQL에 연결할 수 있습니다.
저도 같은 문제를 겪고 있었는데, 이렇게 해결했습니다.
이거 먹었는데 안 되더라고요.
$con = mysql_connect('localhost', 'root', '1234');
내가 이렇게 했더니 효과가 있었어
$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');
mysql 서버를 사용하는 대신 Unix Socket에 직접 연결했습니다.나한테는 통했어
MySQL에 /tmp/mysql.sock
★★★★★★★★★★★★★★★★★」/var/mysql/mysql.sock
PHP는 PHP를 참조해 주세요.
소켓의 위치를 확인합니다.
sudo /usr/libexec/locate.updatedb
updated b가 종료되는 경우:
locate mysql.sock
그런 다음 php.ini를 찾습니다.
php -i | grep php.ini
다음과 같이 출력됩니다.
Configuration File (php.ini) Path => /opt/local/etc/php54 Loaded Configuration File => /opt/local/etc/php54/php.ini
php.ini 편집
sudo vim /opt/local/etc/php54/php.ini
회선을 변경합니다.
pdo_mysql.default_socket=/tmp/mysql.sock mysql.default_socket=/tmp/mysql.sock mysqli.default_socket = /tmp/mysql.sock
여기서 /tmp/mp.mp는 소켓에 대한 경로입니다.
수정 내용을 저장하고 ESC + SHIFT: x를 종료합니다.
Apache 재시작
sudo apachectl stop sudo apachectl start
Mac OS X에서 XAMPP를 사용하고 있으며, Brian Lowe의 솔루션은 약간의 수정으로 동작했습니다.
mysql.sock 파일은 실제로 "/Applications/xampp/xamppfiles/var/mysql/" 폴더에 있습니다.그래서 /tmp와 /var/mysql 둘 다 링크해야 했습니다.PHP 명령줄에서 어떤 것을 사용하고 있는지 확인하지 못했습니다만, 이것으로 수정이 되었기 때문에 기쁩니다:-)
sudo su
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock
mkdir /var/mysql
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock
Mac OS X EL Capitan + MAMP Pro 실행 방법
cd /var
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
그럼 이렇게 해
cd /tmp
sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
이것으로 시간을 절약하시길 바랍니다.
가 php의 수 입니다.mysql.sock
.
먼저 mysql이 실행 중인지 확인하십시오.
후 가 """ "" "" " " " " " " " " " " " " 입니다.mysql.sock
예: " " ), " " 등)/tmp/mysql.sock
다음 경로 문자열을 php.ini에 추가합니다.
- mysql.default_module = /tmp/module.module
- mysqli.default_module = /tmp/module.module
- pdo_mp.default_mp = /tmp/mp.mp.mps
마지막으로 Apache를 재시작합니다.
다음과 같은 문제가 발생했을 경우:
PHP 전송 오류 "경고: mysql_connect() http://function.mysql-connect: 2002 파일 또는 디렉터리가 없습니다(unix://tmp/mysql.sock을 통해 연결하려고 합니다)"
mysql.default_socket"에서 "합니다./etc/php.ini
접속합니다.
"mysql.default_socket = /var/mysql/mysql.sock".
그런 다음 서버 관리자에서 웹 서비스를 재시작합니다.
다가오는 2002 소켓 오류를 수정합니다.MySQL이 소켓을 배치하고 OSX가 생각하는 위치를 링크합니다.MySQL은 소켓을 /tmp에 배치하고 OSX는 소켓을 /var/mysql에서 찾습니다.소켓은 mysql 클라이언트/서버 통신이 가능한 파일 유형입니다.
sudo mkdir /var/mysql
그리고 나서.
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
출처 : http://coolestguidesontheplanet.com/get-apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/
또 다른 해결책은 다음과 같이 php.ini 구성 파일의 소켓 위치를 수정하는 것입니다.
pdo_mysql.default_socket=/tmp/mysql.sock
물론 심볼링크도 동작하기 때문에 어느 쪽을 바꾸느냐에 따라 달라집니다.
포트를 사용하여 php53-mysql을 설치하면 이 문제의 해결책인 다음 메시지가 반환됩니다.
To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.
For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock
나도 같은 문제를 겪고 있었다.
[PDOException] SQLSTATE[HY000] [2002] 해당 파일 또는 디렉터리가 없습니다.
[Error Exception]경고: PDO::_construct(): [2002]htdocs/Symfony/vendor/doctrine-dbal/lib/Doctrine/DB에 (유닉스://var/mysql/mysql.sock 경유로 연결을 시도 중) 파일 또는 디렉토리가 없습니다.AL/드라이버/PDOC 연결php
그래서 해결책은 sock 파일에 심볼링크를 만들어 문제를 해결하는 것입니다.이 문제를 해결하려면 다음 작업을 수행합니다.
$sudo mkdir / private / var / sudo /
$sudoin -s / Applications / MAMP / tmp / mysql / mysql . sock / private / var / mysql / mysql . sock
출처 : http://www.reecefowell.com/2012/07/21/symfony2-cli-does-not-connect-to-mysql-while-browser-works-fine/
저도 같은 오류가 났어요.mysql은 phpMyAdmin을 시작하기 전에 스탠드아론 어플리케이션으로 실행되고 있었습니다.
mysql을 정지했습니다.그러면 sudo / Applications / XAMPP / xampp files / xampp stop sudo / Applications / XAMPP / xampp files / xampp start
잘 작동했다.
방금 이 문제가 있었는데, 특정 페이지를 로드했을 때만 표시되었습니다(다른 페이지는 정상적으로 동작했습니다).알고 보니 접속을 종료한 후 MySQL에 전화를 걸고 있었습니다.mysql_close()
@brucenan이 말했듯이 MySQL을 호출할 때 실행 중인지 확인합니다.
Apple 터미널에서 MAMP php 에일리어스만 하면 됩니다.
alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'
예제:> phpmamp - v
이제 다음과 같은 작업을 수행할 수 있습니다.> phpmamp scriptname.php
주의: 이것은 현재 터미널 세션에만 적용됩니다.
는 MAMP를 사용할 수 있으므로 포트를 기본 3306으로 변경하거나 데이터베이스에서 127.0.0.1을 사용합니다.php
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',// leave it for port 3306
'username' => 'yourUserhere',
'password' => 'yourPassword',
'database' => 'yourDatabase',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
또는 기본 설정:
$db['default'] = array(
'dsn' => '',
'hostname' => '127.0.0.1:8889',// leave it for port 8889
'username' => 'yourUserhere',
'password' => 'yourPassword',
'database' => 'yourDatabase',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
기본적으로 mySQL 클라이언트는 localhost의 루프백주소(127.0.0.1)에 접속하는 대신 소켓이라는 로컬파일을 통해 접속을 시도합니다.
적어도 OSX에서는 이 소켓파일의 기본 위치는 다음과 같습니다./tmp/mysql.sock
.
빠르고 덜 우아한 솔루션
OS가 올바른 소켓을 찾도록 속이는 심볼 링크를 만듭니다.
ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp
적절한 솔루션
에서 정의된 소켓 경로를 변경합니다.startMysql.sh
줄지어 들어가다/Applications/MAMP/bin
.
언급URL : https://stackoverflow.com/questions/4219970/warning-mysql-connect-2002-no-such-file-or-directory-trying-to-connect-vi
'programing' 카테고리의 다른 글
Vue에서 구성 요소를 가져올 위치 (0) | 2022.10.12 |
---|---|
MySQL 데이터베이스 이름 변경 (0) | 2022.10.03 |
Argparse:'--help'에 기본값을 포함하는 방법? (0) | 2022.10.03 |
MySQL 5.0 인덱스 - 고유 대 고유하지 않음 (0) | 2022.10.03 |
Symfony 2에 JSON 개체 게시 (0) | 2022.10.03 |