소켓 '/var/mysql/mysql.sock'을 통해 로컬 MySQL 서버에 연결할 수 없습니다 (38).


385

mysql에 연결하는 데 큰 문제가 있습니다. 내가 실행할 때 :

/usr/local/mysql/bin/mysql start

다음과 같은 오류가 있습니다.

Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38)

나는이 있습니까 mysql.sock세 이하 /var/mysql디렉토리.

에서 /etc/my.cnfI 있습니다 :

[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

그리고 /etc/php.ini나는 가지고있다 :

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

나는 아파치를 다시 시작했다. sudo /opt/local/apache2/bin/apachectl restart

그러나 여전히 오류가 있습니다.

그렇지 않으면, 그와 관련이 있는지 모르겠지만 내가 할 때 mysql_config --sockets내가 얻을

--socket         [/tmp/mysql.sock]

53
MySQL이 실행 중입니까?
David

2
그것은 분명히 연결하려고하는 오류를 설명합니다. @Romain이 언급했듯이 MySQL 로그에 /var/log/mysql실행되지 않는 이유를 표시하는 방법이 있습니까? 시작하려고 할 때 오류가 발생합니까?
David

5
같은 오류가 발생했지만 디스크가 100 % 찼기 때문에 mysql이 시작되지 않는다는 것을 알았습니다. /var/log/mysqld.log가 도움이되었습니다.
yellavon

4
그들이 실행 중인지 묻는 이유는 서비스가 시작될 때 소켓이 만들어지기 때문입니다. mysql을 설치했지만 서비스를 시작하지 않았으므로 .sock 파일이 없습니다. service mysqld start방금 설치 한 경우 입력 하십시오. hth
changokun

2
아래의 shimanyi의 답변이 나를 sudo service mysql start구원했습니다
Kiren Siva

답변:


218

my.cnf 파일 (일반적으로 / etc / mysql / 폴더에 있음)이 올바르게 구성되어있는 경우

socket=/var/lib/mysql/mysql.sock

다음 명령으로 mysql이 실행 중인지 확인할 수 있습니다.

mysqladmin -u root -p status

mysql 폴더로 권한을 변경하십시오. 로컬에서 작업중인 경우 다음을 시도해보십시오.

sudo chmod -R 755 /var/lib/mysql/

나를 위해 그것을 해결


11
위의 단계를 수행하고 mysqld서비스를 다시 시작한 후에 도움이되었습니다 .
whirlwin

11
디렉토리 소유자 만 쓸 수 있도록 권한을 755로 설정하는 것이 가장 좋습니다.
codewaggle 2016 년

2
내 문제는 실제로 내 웹 응용 프로그램의 스토리지 볼륨에 공간이 부족하다는 것입니다! 권위 있는!
James T Snell

3
내 openSUSE 12.3에서 my.cnf는 / etc /에 있습니다.

우리는 또한, /var/log/mysqld.log 덕분에 권한을 변경해야합니다
Allahbakash.G

94

mysql 서버뿐만 아니라 mysql도 설치했는지 확인하십시오.

예를 들어 mySql 서버를 설치하려면 yum 또는 apt를 사용하여 mysql 명령 줄 도구와 서버를 모두 설치합니다.

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

MySQL 서비스를 활성화하십시오 :

/sbin/chkconfig mysqld on

MySQL 서버를 시작하십시오 :

/sbin/service mysqld start

그런 다음 MySQL 루트 비밀번호를 설정하십시오.

mysqladmin -u root password 'new-password' (with the quotes)

도움이 되길 바랍니다.


나는 homebrew를 사용했고 그것은 매력처럼 일했다 :brew install mysql
JaKXz

2
나는 클라이언트를 이미 설치했고, 필요한 명령은 sudo apt-get install mysql-server인생이 좋았다
ErichBSchulz

1
클라이언트 의 출력 Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38) 아닙니까? 클라이언트가 연결을 시도하고 실패하고 있습니까? (나는 그것을 명확히하기 위해 원래 질문을 편집해야한다고 생각합니다).
msouth

76

나를 위해 일한 빠른 해결 방법 : mysql_connect ()에서 'localhost'대신 로컬 IP 주소 (127.0.0.1)를 사용해보십시오. 이것은 PHP를 유닉스 소켓 대신 TCP / IP를 통해 연결하도록 "강제"합니다.


효과가 있었지만 왜? MySQL 은 연결을 시도하기 전에 해결 localhost하고 127.0.0.1어쨌든 얻지 않습니까?
Jaime Hablutzel

3
아니요. localhost를 사용할 때 인터넷 소켓을 사용하지 않습니다. IPC 소켓을 사용하고 있습니다. en.wikipedia.org/wiki/Unix_domain_socket . 127.0.0.1은 로컬 루프백으로, 요청이 컴퓨터를 종료하지 않지만 TCP / IP를 사용하므로 속도가 느려집니다.
Master Yogurt

나에게도 효과가 있습니다. 우분투 14.04, hhvm 및 nginx에 있습니다.
Maykonn

1
감사. 이것은 나를 위해 작동하지만 수정 사항이 무엇인지 대답에서 명확하지 않습니다
Nathan Buesgens

이것은 ssh 터널을 통해 원격 서버에 연결할 때도 필요합니다
Tamm

51

다음과 같은 오류가 발생했습니다

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

여러 가지 방법을 시도하고 마침내 다음과 같은 방법으로 해결했습니다.

sudo gksu gedit /etc/mysql/my.cnf

수정

#bind-address       = 127.0.0.1

bind-address        = localhost

그리고 다시 시작

sudo /etc/init.d/mysql restart

그것은 효과가 있었다


비슷한 문제가있었습니다. 이더넷 (192.168.220.11)에서 wifi (192.168.220.12)로 이동했지만 바인드 주소가 이더넷 IP로 하드 코딩되었습니다. localhost수정으로 변경 .
Chris G

30

mysqld를 실행 중인지 확인하십시오. /etc/init.d/mysql start


3
또는 sudo service mysql start|restart우분투.
Wtower

18

문제가 발생하지 않도록하려면 서버 전원을 끄지 말고 명령 줄에서 서버를 정상적으로 종료해야합니다.

shutdown -h now

머신 전원을 끄기 전에 실행중인 서비스를 중지합니다.

Centos를 기반으로이 문제가 발생했을 때 다시 백업하는 추가 방법은 mysql.sock을 옮기는 것입니다.

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start

서비스를 다시 시작하면 mqsql.sock이라는 새 항목이 작성됩니다.


14

파일에 cron 작업을 설정할 때이 오류가 발생했습니다. 파일 권한을 777로 변경 했지만 여전히 작동하지 않습니다. 마침내 나는 해결책을 얻었다. 다른 사람들에게 도움이 될 수 있습니다.

이 명령으로 시도하십시오 :

mysql -h 127.0.0.1 -P 3306 -u 루트 -p

-h는 호스트를 , -P는 포트를 , -p는 비밀번호를 의미합니다.


소켓을 사용하는 대신 TCP / IP를 통한 연결을 강제하는 것은 비효율적입니다 ( 이 이전 답변 에 따라 서버에서 로컬 호스트 TCP / IP 지원을 설정해야합니다 ). 2011 년에 채택 된 답변이 더 좋습니다. 소켓을 올바르게 사용할 수 있도록 서버를 구성하십시오.
Quentin

10
-p포트를 의미하는 것이 아니라 , 암호를 의미하는 것입니다.-P
Quentin


나를 위해 그것은 올바른 호스트를 정의하는 문제였습니다. mysql -h 127.0.0.1 -u root -p
kghbln

12

여기에 많은 답변에서 알 수 있듯이 MySQL 서비스를 시작할 때이 오류 메시지가 발생할 수있는 많은 문제가 있습니다. 문제는 적절한 로그 파일을 보면 MySQL이 일반적으로 무엇이 잘못되었는지 정확하게 알려주는 것입니다.

예를 들어 우분투에서는을 확인해야합니다 /var/log/syslog. 다른 많은 것들도이 파일에 기록 될 수 있기 때문에, 아마도 grepmysql 메시지 tail를보고 가장 최근의 것을보고 싶을 것입니다 . 모두 함께 보면 다음과 같습니다.

grep mysql /var/log/syslog | tail -50

다른 사람이 '이것은 내 시스템에서 작동했습니다.'라고 말했기 때문에 맹목적으로 구성을 변경하지 마십시오. 실제로 시스템에 어떤 문제가 있는지 파악하면 훨씬 더 나은 결과를 얻을 수 있습니다.


5
+1 한 걸음 물러서서 다른 많은 답변들도 고려하지 못한 것을 지적하기 위해-실제로 응용 프로그램이 문제로보고 할 수있는 것을 보는 것은 맹목적으로 서두르지 않고 변경하지 않는 것보다 훨씬 나은 접근 방법입니다. 적용 가능 ...!
SlySven

아, 잘못 사용하고 .cnf있습니다. 그것은 그것을 설명합니다. 이제 무작위로 시도하는 것을 중단하고 실제 문제를 해결할 수 있습니다. 감사.
Synetech

11

다른 해결 방법은 /etc/my.cnf를 편집하고 [client] 섹션에 호스트를 포함시키는 것입니다.

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

그런 다음 mysql 서비스를 다시 시작하십시오.

이 대안은 다음에서 테스트되었습니다. 서버 버전 : 5.5.25a-log 소스 배포


my.cnf에 있지 않은 경우 [client] 섹션을 추가하는 것이 좋습니다
Cris

7

나는 같은 문제가 있었고 mysql 서버가 실행될 때 mysql 드라이버 업데이트로 인해 발생했습니다. mysql과 apache2를 모두 다시 시작하는 것을 수정했습니다.

sudo 서비스 mysql 중지

sudo 서비스 mysql 시작

sudo 서비스 아파치 2 중지

sudo 서비스 아파치 2 시작


제 경우에는 mysql달리지 않았습니다. 나는 실행 되지 않은 것을 확인하기 위해 실행 sudo service mysql start한 후에 달렸다 sudo service mysql status.
Tass December

6

제 경우에는 Centos 5.5를 사용하고있었습니다. 문제는 mysql 서비스가 어떻게 중단 되었기 때문이라는 것을 알았습니다. 그래서 다음 명령으로 mysql 서비스를 시작했습니다.

 /etc/init.d/mysqld start

.. 바보 같은 실수.


6

모든 것이 제대로 작동하고이 오류가 발생하기 전에 다른 작업을 수행하기 전에 디스크 공간이 부족하지 않은지 확인하십시오.

df -h

mysql.sock 이 생성되는 볼륨 이 100 % 사용 된 경우 MySql은이를 생성 할 수 없으며이 오류의 원인이됩니다. 오래된 로그 파일과 같이 필요하지 않은 것을 삭제하기 만하면됩니다.



5
sudo service mysql start

이것은 당신에게 잘 봉사해야합니다. mysql 구성에 영향을주는 일부 명령을 변경했을 수 있습니다.


또는 systemctl start mariadb.serviceFedora 22 또는 RedHat 7에서. 그런 다음 루트 암호를 설정할 수 있습니다.
Junior Mayhé

5

이 문제에 대한 많은 해결책이 있지만 내 상황 에 따라 컴퓨터 / 서버 에서 날짜 를 수정해야했습니다 ( Ubuntu 16.04 Server ) .

i) 서버 날짜를 확인하고 수정하십시오.

ii) 달리기 sudo /etc/init.d/mysql restart

시작해야합니다.


4

MAMP를 실행 중이고 .sock 파일이 다른 위치에 있기 때문에 오류가 발생했습니다. 방금 앱이 실제 위치를 가리켜 야한다고 생각하고 매력처럼 작동하는 심볼릭 링크를 추가했습니다.


앱이 실제 위치를 가리키는 것으로 생각되는 곳에 심볼릭 링크를 추가하는 방법은 무엇입니까?
Gilberto Ibarra

4

또한 이것이 권한 문제라는 것을 알았습니다. MySQL 파일을 실제 설치 (Debian 6 스퀴즈 모두)와 비교하고 다음과 같이 소유권을 변경해야했습니다.mydatabase 데이터베이스가있는 ).

소유권 mysql:mysql:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/* 

소유권 mysql:root:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld 

소유권 mysql:adm:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log* 

4

나를 위해-이것은 단순히로드하는 데 오랜 시간이 걸리는 MySQL의 경우였습니다. 내 데이터베이스 중 하나에 100,000 개가 넘는 테이블이 있으며 결국 시작되었지만이 인스턴스에서는 시간이 오래 걸렸습니다.


3

AWS (Amazon Web Services) Micro 버전을 사용하는 경우 메모리 문제입니다. 내가 달릴 때

mysql

터미널에서 그것은 말할 것이다

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

그래서 다음을 시도했는데 실패했을 것입니다.

service mysqld restart

많은 검색을 한 후 MySQL이 충분한 메모리를 갖기 위해 스왑 파일을 만들어야한다는 것을 알았습니다. 지침은 다음과 같습니다. http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html .

그런 다음 mysqld를 다시 시작할 수있었습니다.


AWS 서버 "micro"인스턴스에서 동일한 문제가 발생하여 스왑 파일을 DID로 수정하여 "오류 2002 (HY000) :"var / run / mysqld / mysqld 소켓을 통해 로컬 MySQL 서버에 연결할 수 없음을 확인할 수 있습니다. .sock '(111) "문제입니다. @ jth_92 감사합니다!
코나 라스

3

다음 --socket과 같은 옵션을 사용하여 mysql.sock 파일의 위치를 ​​지정하여 항상 mysql 서버를 시작할 수 있습니다

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

소켓 파일의 위치가 my.cnf 파일의 다른 위치에 지정된 경우에도 작동합니다.


3

솔루션이 작동하지 않는 경우 다음을 시도하십시오.

cd /etc/mysql

my.cnf 가 있는지 확인하십시오

nano my.cnf

다음과 같이 하나의 바인드 주소 만 있는지 확인하십시오.

바인드 주소 = 127.0.0.1

그렇지 않은 경우 문제 일 수 있습니다. nano를 종료하고 파일을 저장하십시오.

service mysql start

nano (텍스트 편집기)가 없으면 그냥 설치 apt-get install nano한 다음 Ctrl + X를 눌러 종료 한 다음 Y를 말하여 같은 파일을 저장하고 사용하십시오.


불행히도 이것은 작동하지 않았습니다. 이것은 기본적으로 로컬 머신 만 mysql에 액세스 할 수 있다고 말합니다. 원격 연결이 없습니다.
stephen

3

서버를 시작하려고 할 때도이 문제가 있었으므로 서버를 시작한다고 말하는 많은 대답이 작동하지 않았습니다. 가장 먼저 할 수있는 것은 구성 오류가 있는지 확인하기 위해 다음을 실행하는 것입니다.

/usr/sbin/mysqld --verbose --help 1>/dev/null

하나의 오류가 발생했습니다.

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

단순한 grep -HR "innodb-online-alter-log-max-size" /etc/mysql/ 것은 문제가 된 줄이 들어있는 파일을 정확히 보여 주었으므로 파일에서 해당 줄을 제거했습니다.

그런 다음 내 /var/log/mysql/error.log파일을 확인하면 다음과 같습니다.

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting

이 질문을 바탕으로 서버를 시작할 수 없기 때문에 허용 된 솔루션이 작동하지 않으므로 일부 의견에서 말한 내용 /var/lib/mysql/ib_logfile0/var/lib/mysql/ib_logfile1파일을 삭제했습니다 .

이렇게하면 서버가 시작되고 쿼리를 연결하고 실행할 수 있었지만 오류 로그 파일을 확인하면 다음과 같이 수만 줄이 빠르게 채워졌습니다.

160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

here 의 제안 에 따라이 문제를 해결하기 위해 mysqldump를 수행하고 모든 데이터베이스를 복원했습니다 (다른 솔루션에 대한 링크 참조).

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

모든 것이 현재 예상대로 작동하는 것 같습니다.


확인 /var/log/mysql/error.log내 경우에 도움을 주었다. 이 한 [ERROR] Can't init tc log신속하게 다음과 같은 대답을 사용하여 고정 된 : dba.stackexchange.com/a/185006/163583
Juraj.Lorinc

2

첨가

--protocol=tcp 

당신의 연결에서 pramaters 목록에 나를 위해 일했다.


2

이것은 나를 위해 충분히 좋았다

sudo /etc/init.d/mysql restart

2

나는 오늘이 문제에 부딪쳤다. 이 답변들 중 어느 것도 해결책을 제공하지 못했습니다. mysql 서비스를 시작 하려면 다음 명령 ( https : //.com/a/20141146/633107에 있음) 을 수행해야했습니다 .

sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

이것은 /var/log/mysql/error.log에 다음과 같은 오류로 부분적으로 표시되었습니다.

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting

또한 디스크 가득 참 오류를 보았지만 sudo없이 명령을 실행할 때만 가능했습니다. 사용 권한 확인에 실패하면 디스크가 가득 찼습니다 (파티션이 가득 차 있지 않은 경우에도).


2

CentOS 7, 64 비트. 새로 설치.
필자의 경우 오류는 올바른 MySQL 서버와 MySQL 클라이언트가 설치되어 있지 않기 때문입니다.
를 사용하여 mysql-community edition을 yum제거했습니다 mariadb. 공식 MySQL 웹 사이트 에서 클라이언트 및 서버의 rpm을 다운로드했습니다. 서버와 클라이언트를 설치했습니다.

서버를 설치할 때 MySQL의 루트 계정 암호가 볼 수있는 파일에 저장되었다는 메시지가 표시되었습니다 sudo cat /root/.mysql_secret.

따라서 클라이언트와 서버를 설치 한 후 MySQL이 명령으로 작동하는지 확인한 sudo service mysql status후 결과를 얻었습니다.

MySQL 실행 중 (2601) [OK]

.mysql_secret 파일의 비밀번호를 사용하여 MySQL에 로그인했습니다
mysql -uroot -pdxM01Xfg3DXEPabpf. 참고dxM01Xfg3DXEPabpf .mysql_secret 파일에 언급 된 암호입니다.

그런 다음 mysql 프롬프트에서 다음 명령을 입력하여 root의 비밀번호를 변경하십시오.

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

그때부터 모든 것이 잘 작동했습니다.


1
서버 버전이 5.6.23-enterprise-commercial-advanced 인 RHEL6U6의 경우와 동일합니다.
HCD


2

이것은 귀하의 질문에 직접 대답하는 것이 아니라 PythonAnywhere를 사용하는 질문의 일부입니다. 나는 픽스를 찾을 때이 질문에 걸려 넘어져서 내 상황에서 다른 사람들을 도울 수 있도록 여기에 추가하고 있습니다.


PythonAnywhere는 로 효율성과 신뢰성을 향상시키기 위해 데이터베이스 연결 호스트 이름을 변경하기로 결정 여기에 설명 :

계정의 MySQL 데이터베이스 인스턴스에 연결하는 데 사용해야하는 공식 호스트 이름이 mysql.server에서 yourusername .mysql.pythonanywhere-services.com으로 변경되었습니다 . 이는 최근 몇 주 동안 문제가 발생하기 시작한 인프라의 일부를 우회하며 기존 방식보다 훨씬 효율적이고 안정적이어야합니다.

따라서 호스트 이름을 위에 강조 표시된 값으로 업데이트해야합니다.



1

이 소켓 오류가 있었고 기본적으로 MySQL이 실행되고 있지 않다는 사실이 밝혀졌습니다. 새로 설치하는 경우 1) 시스템 패키지와 2) 패널 설치 프로그램 (mysql.prefPane)을 설치해야합니다. 패널 설치 프로그램을 사용하면 시스템 환경 설정으로 이동하여 MySQL을 연 다음 인스턴스를 실행할 수 있습니다.

새로 설치하는 경우 변경 사항이 제대로 적용되도록 컴퓨터를 재설정해야했습니다. 재부팅 한 후 새 인스턴스를 실행하고 문제없이 localhost에 대한 연결을 열 수있었습니다.

또한 이전 버전의 MySQL이 설치되었지만 패널을 제거했기 때문에 mac 사용자를 위해 MySQL 인스턴스를 쉽게 실행할 수 있습니다.

이 재설치 프로세스에 대한 좋은 링크 : http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.