[php] 경고 : 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은 필요한 소켓 파일의 위치가 약간 잘못되었지만, 해결책은 심볼릭 링크를 설정하는 것만 큼 간단합니다.

소켓이 (길이가 0 인 파일로 표시됨) /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는 잘못된 위치에 있습니다.

  1. 소켓이 어디에 있는지 확인하십시오.

     sudo /usr/libexec/locate.updatedb
  2. updatedb가 종료 될 때 :

     locate mysql.sock
  3. 그런 다음 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
  4. php.ini 편집

     sudo vim /opt/local/etc/php54/php.ini
  5. 줄을 바꾸십시오 :

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

    여기서 /tmp/mysql.sock은 소켓의 경로입니다.

  6. 수정 사항을 저장하고 ESC + SHIFT를 종료하십시오. x

  7. 아파치 다시 시작

     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_socket = /tmp/mysql.sock
  • mysqli.default_socket = /tmp/mysql.sock
  • pdo_mysql.default_socket = /tmp/mysql.sock

마지막으로 Apache를 다시 시작하십시오.