Can't connect to local MySQL server through socket (2) 해결

반응형
    반응형

    mysql 를 켤 때 다음과 같은 에러가 뜰 수 있습니다. 

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

    이 문제의 원인은 세가지입니다.

    1. server가 socket 연결을 못한 경우 
    2. MySQL 서버가 실행되지 않은 경우
    3. mysql.sock 시스템을 못 찾는 경우

    정확히 어떤 문제인지는 하나씩 해봐야합니다.
    어쨋든 큰 맥락은 service connection이 안되는 거니 mysql service를 재시작하는 게 무난한 방법입니다. (잘 안 되면 껐다켜보는것이 가장 빠른 방법입니다) 일반적으로 설치가 잘 되었고 크게 뭘 안 건드렸다면 1, 2번의 경우라고 생각하고 우분투인 경우는 다음 명령을 치면 해결됩니다.

    저는 혹시 켜져있을수도 있어서 stop 후 start를 하는 restart로 명령을 합니다. 그런데 한번도 service를 켜지 않았다면 start로 명령을 내려도 됩니다.

    sudo service mysql restart   # sudo service mysql start

    실제로 sock의 경우 실행될때는 생기고 종료하면 사라지는 임시메모리와 같은 역할을 합니다. mysqld.sock 이 있는 곳으로 가서 확인을 해보겠습니다. 당연히 mysqld.sock이 시작된 상태에서 해야합니다.

    sudo service mysql start #잘 안되면 sudo service mysql restart
    mysqladmin -u root -p version

    해당 폴더로 가서 mysqld.sock이 있는지 확인하겠습니다.


    그러면 이렇게 mysqld.sock이 있는 걸 확인할 수 있습니다.

    이게 service를 종료시키면 사라집니다.

    sudo service mysql stop

    종료후 다시 살펴보면 mysqld.sock 이 없어집니다.

     

    위에서 본대로 포트연결은 말그대로 임시적으로 갖다꽂아놨다가 다시 떼어서 다른 거 꽂고 파이프와 같은 역할을 합니다. 그러니 mysql.sock는 보통 임시적으로 저장했다 종료하면 사라지기 마련입니다. 따라서 매뉴얼에 이미 설정되어 있는 준비된 위치에 가서 코드 꽂듯이 꽂으면 아무 문제가 없습니다. 그런데 그게 변경이 되었거나 연결과정에서 충돌이 일어나면 오류가 뜨기 마련입니다. 여기까지가 해결방법이었습니다. 아래 내용은 소켓 위치가 변경되어야 하거나 그렇게 되었다면 시도해볼만한 방법입니다.

     

     

    만약 소켓 지정위치가 변경이 되었다면 경로 지정설정을 할 수 있는 mysqld_safe 파일에서 다시 설정을 하는 방법이 있습니다. 즉, 3번의 경우를 뜻합니다.(개발환경을 막 쓰지 않는한 거의 일어나지 않습니다)

    임시적으로 실행

    먼저 mysql.sock 위치를 찾습니다.

    mysqladmin -u root -p version

    위치를 찾으면 해당 경로로 지정하고 mysql을 실행합니다.

    sudo mysql -u root -p mysql -S 'sock 경로'

    경로 직접 고치기

    직접 경로를 고쳐 해결하는 방법이 있습니다.
    mysqld_safe 파일에서 아래 부분을 찾아 mysql.sock이 있는 경로로 고칩니다.

    safe_mysql_unix_port=${mysql_unix_port:-${MYSQL_UNIX_PORT:-'mysql.sock 경로'}}

    마치며

    Can't connect to local mysql sesrver through socket(2) 에러해결방법에 대해 알아보았습니다.
    사실 언제건 service mysql start로 service를 시작하고서 mysql을 시작해야 합니다.  socket이 없으면 mysql은 시작할 수 없습니다. 당연한 실행방법이지만 윈도우에서는 프로그램으로 구동되기 때문에 바로 mysql을 시작하면 됩니다. 하지만 리눅스에서 service를 직접 구동 시켜주어야 합니다. 물론 처음 쓰시는 분들은 이런 사실을 잘 모르고 mysql을 시작할 수 있습니다. 그러고 오류와 함께 멘붕에 빠지게 되는것이지요. 필히 기억해주길 바랍니다.

    댓글

    Designed by JB FACTORY

    ....