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


255

mysql에 연결하려고 할 때 다음 오류가 발생합니다.

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

이 오류에 대한 해결책이 있습니까? 그 이유는 무엇입니까?


: 나는 아래 링크를 확인하시기 바랍니다 여기이 대답했다 stackoverflow.com/a/35577309/4773290
Pratik 파틸

답변:


222

"localhost"또는 "127.0.0.1"에 연결하고 있습니까? "localhost"에 연결하면 소켓 커넥터가 사용되지만 "127.0.0.1"에 연결하면 TCP / IP 커넥터가 사용됩니다. 소켓 커넥터가 활성화 / 작동되지 않으면 "127.0.0.1"을 사용해보십시오.


27
이 경우 MYSQL 서버가 실제로 실행 중인지 확인해야합니다.
Jan Thomä

3
또한 소켓 매개 변수가있는 소켓 (/ usr / bin / mysql이있는 -S)을 강제로 사용하고 포트 (/ P는 / usr / bin / mysql이 있음)를 제공하여 TCP / IP를 강제 할 수 있습니다.
Kaoru

localhost 이외의 정규화 된 네트워크 이름을 사용하는 것이 저에게 효과적이었습니다. 클라이언트 측 '호스트'파일에 선언되어 있는지 확인하십시오.
Fabien Haddadi

2
cygwin 사용자 참고 사항 : cygwin mysql 클라이언트가 예를 들어 로컬 WAMP mysql 서버에 연결하려고 시도하는 경우 -h <localhost 이외의 호스트 이름>을 사용하십시오. mysql.sock 파일을 만들거나 my.cnf 파일에 선언하지 않으면 작동하지 않습니다.
Fabien Haddadi

잘못된 호스트 이름으로 인해 동일한 오류가 발생했습니다. /etc/hosts내 docker 컨테이너 의 파일을 보면 MySql 호스트 이름이 인 것으로 나타났습니다 mysql. 연결 구성에서 동일한 호스트 이름을 사용하면 문제가 해결되었습니다.
Stephane

188

mysql 서비스가 실행 중인지 확인하십시오

service mysqld start

그런 다음 다음 중 하나를 시도하십시오.

(mysql에 비밀번호를 설정하지 않은 경우)

mysql -u root

이미 비밀번호를 설정 한 경우

mysql -u root -p

5
데비안의 최신 릴리스에 service mariadb start있기 때문에 mariadb.org/debian-9-released-mariadb-mysql-variant
자 흐라

2
그 사람에게 메달을주세요.
Siraj Alam

이것이 저에게 답이었습니다. 내가 mariadb를 사용하고 있기 때문에 해결책은 "sudo systemctl start mariadb"를 실행하는 것이 었습니다. 그 후 모든 것이 잘되었습니다.
mohsen

@Zahra에게 메달 수여
Ahmed C

28

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

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

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

mysqladmin -u root -p status

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

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

나를 위해 그것을 해결


그것은 나에게도 효과가 있지만 가장 최신 버전으로 업그레이드 한 후에이 문제가 나타나는 이유는 무엇입니까?

sudo는 chmod를 -R 777은 / var / lib 디렉토리 / mysql을 / I는 고정 표시기 컨테이너 mysql을 시작으로 한 문제와 나를 위해 일한
user3152459

23

MySQL 서버가 실행 중이 아니거나 소켓 파일의 위치가 아닙니다 (my.cnf 확인).


위에서 설명한 문제가 있었고 이것이 문제였습니다. 감사.
oshirowanen

3
Homebrew를 설치할 위치는 어디입니까?
pal4life

19

mysql.sock존재하지 않을 가능성 이 높습니다 /var/lib/mysql/.

다른 위치에서 동일한 파일을 찾으면 심볼릭 링크하십시오.

예를 들어 : 나는 그것을 가지고 /data/mysql_datadir/mysql.sock

사용자를 mysql로 ​​전환하고 아래 언급 된대로 실행하십시오.

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

그게 내 문제를 해결했다


mysql.sock의 이름을 다른 것으로 바꾸고 mysqld를 다시 시작한 다음 ( "service mysqld restart") 다른 이름을 mysql.sock으로 다시 바꾸면 나에게 도움이되었습니다. 이 답변에 약간의 차이가 있으므로 감사합니다.
퍼지 분석

답변은 mysql.sock파일을 찾는 데 도움 될 수 있습니다
Nobita

15

최신 RHEL을 사용하는 경우 mysql db 대신 mariadb (오픈 소스 mysql db)를 시작해야 할 수 있습니다.

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

그런 다음 일반적인 방식으로 mysql에 액세스 할 수 있어야합니다.

mysql -u root -p

참고로 CentOS 8.1에서도 작동합니다. 설치 후 mariadb-server및 일부 안전하지 않은 기본 설정을 정리하기 mariadb위해 실행 mysql_secure_installation하는 것을 잊지 마십시오 .
Dio Phung

13

내 경우에는 내가 다른 위치의 내부에 소켓 파일을 이동 한 /etc/my.cnf 에서 /var/lib/mysql/mysql.sock/tmp/mysql.sock

mysqld 서비스를 다시 시작한 후에도 연결하려고 할 때 여전히 오류 메시지가 표시됩니다. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

문제는 클라이언트가 구성되는 방식에 있습니다. 진단을 실행하면 실제로 올바른 소켓 경로가 표시됩니다. 예 :ps aux | grep mysqld

공장:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

작동하지 않습니다 :

mysql -uroot -p
mysql -uroot -p -hlocalhost

mysql 설정의 섹션 아래에 동일한 소켓 라인 을 추가 하여이 문제를 해결할 수 있습니다 .[client]


13

편집 /etc/my.cnf 다음 줄 추가my.cnf

[mysqld]

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

[client]

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

mysql을 재시작하고 다시 연결하십시오

mysql -u 사용자 -p 비밀번호 데이터베이스 -h 호스트;


유일한 정답입니다. 왜 투표가 충분하지 않은지 궁금합니다.
CentAu

11

mysqld 서비스가 실행 중인지 확인하고, 실행되지 않으면 서비스를 시작하십시오.

문제가 해결되지 않으면 /etc/my.cnf로 시작하는 줄이 표시되는 다음과 같이 찾아 수정하십시오 socket. 이 업데이트를 수행하기 전에 해당 파일을 백업하십시오.

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

로 변경

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
안녕하세요 Sekar, "find / -name my.cnf"를 입력했는데 두 곳이 있습니다. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. 따라서, 사용하는 어느 .. 내가 여기에 질문을 .. stackoverflow.com/questions/32437796/...
나나 Partykar

7

커뮤니티 개발 MySQL 포크 인 MariaDB는 많은 배포에서 MySQL의 기본 구현이되었습니다.

먼저 시작해야합니다

$ sudo systemctl start mariadb

이것이 실패하면 시도해보십시오.

$ sudo systemctl start mysqld

그런 다음 mysql을 시작하려면

$ mysql -u root -p

현재 Fedora에서 패키지 이름 mariadb 은 Ubuntu에서이라고 mariadb-server합니다.

따라서 시스템에 설치되어 있지 않은 경우 설치해야 할 수도 있습니다.


7

에 충분한 공간이 남아 있는지 확인하십시오 /var. MySQL 데몬이 드라이브에 추가 정보를 쓸 수 없으면 MySQL 서버가 시작되지 않고 오류가 발생합니다Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

사용을 고려하십시오

expire_logs_days = 10
max_binlog_size = 100M

디스크 사용량을 줄이는 데 도움이됩니다.


고마워, Oracle Virtualbox에서 mysql을 실행 중이며 bd 덤프를 만들 때 공간이 부족하여 덤프 파일을 삭제할 때 mysql 서버를 시작할 수 없습니다. 덤프 파일을 삭제하면 mysql 서버를 다시 시작할 수있었습니다.
JayCee

1
이것은 나를 위해 해결했습니다. 프로덕션 환경에서 innodb_buffer_pool_size를 매우 높은 값으로 설정했으며 가상 머신에서 mysql이 충돌했습니다.
Benjamin Brizzi

1
phabricator를 사용할 때이 문제가 있었고 해결책이에서 바뀌 었 innodb_buffer_pool_size습니다 my.cnf. 작은 값으로 설정하는 것은 innodb_buffer_pool_size = 50M이 가설을 버리는 좋은 테스트입니다;)
Yercalamarino

그것은 놀라운 문제였습니다. 디스크 공간을 제외한 모든 것을 확인했습니다. / var에서 공간을 확보하면 다시 돌아 왔습니다!
Nadjib Mami

5

나를 위해 일한 것은 다음과 같습니다.

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart


4

서버를 시작했는지 확인하십시오.

mysql.server start

그런 다음 루트 사용자와 연결하십시오.

mysql -uroot

3

mysql이 이전에 작동 중이고 갑자기 중지 된 경우 서버를 "다시 부팅"하면됩니다.

CentOS VPS에서이 문제에 직면했습니다 .->

끊임없이 받고 있었다

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

모든 기술을 시도하고 마침내 서버를 다시 시작하면 문제가 해결되었습니다.

shutdown -r now

도움이 되었기를 바랍니다 !!



3

/ var / lib / mysql [파일 복사 또는 바꾸기]에서 파일을 변경하는 경우, 파일 소유자를 mysql로 ​​설정해야합니다. mariadb.service restart가 실패한 경우 매우 중요합니다

chown -R mysql : mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *


2

먼저 "service mysqld start"를 입력하고 로그인하십시오


무슨 말이하고 싶은거야? 질문 하기 전에 FAQ 를 읽으 십시오
Freak

이 질문은 3 년 전에 성공적으로 답변되었습니다. 이 정확한 답변은 작년에 더 완전하게 주어졌습니다.
Cairnarvon

2

MySQL 서버를 올바르게 설치했는지 확인하십시오.이 오류가 여러 번 발생했으며 소켓에서 디버깅하는 것이 복잡하다고 생각합니다. 재설치가 더 쉬울 수 있습니다.

CentOS 7을 사용하는 경우 올바른 설치 방법은 다음과 같습니다.

우선, mysql 커뮤니티 소스를 추가하십시오
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

그런 다음에 의해 설치할 수 있습니다 yum install mysql-community-server

systemctl로 시작하십시오. systemctl start mysqld


1

내 문제는 mysql을 성공적으로 설치하고 정상적으로 작동한다는 것입니다.

그러나 어느 날 같은 오류가 발생했습니다.

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

그리고 mysql.sock 파일이 존재하지 않습니다.

이 솔루션은 내 문제를 해결했으며 mysql이 다시 실행되었습니다.

루트로 로그인하십시오 :

sudo su -

운영:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

루트로 테스트하십시오.

mysql -u root -p

이제 mysql이 실행 중이어야합니다.

이것이 다른 사람에게도 도움이되기를 바랍니다.


1

mysql이 my.cnf 파일에서 소켓 파일의 위치 정보를 읽는 동안 mysql_secure_installation 프로그램이 때때로 올바르게 수행하지 않는 것 같습니다.

따라서 당신이 나와 비슷하고 설치시 주변을 뒤섞 으면 mysql로 ​​데이터베이스에 연결할 수는 있지만 상황이 안전하지는 않습니다 (어쨌든 해당 스크립트를 사용하지 않음).

이 문제를 해결하려면 sreddy의 제안이 잘 작동합니다. 스크립트가 소켓을 예상하는 위치에서 실제 위치로 소프트 링크를 만듭니다. 예:

ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

(소켓의 기본 위치로 / tmp /를 사용합니다)


1

그것은 다음과 같은 변화로 나를 위해 일했습니다.

소켓 경로는 my.cnf의 [client]에서 [mysqld]에 언급되어 있으며 mysql을 다시 시작하십시오.

[mysqld] socket = / var / lib / mysql / mysql.sock

[클라이언트] socket = / var / lib / mysql / mysql.sock


1

이 오류를 재현하는 한 가지 방법 : 외부 서버에 연결하려고하지만 존재하지 않는 로컬 서버에 연결하려는 경우 :

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

따라서 다음과 같이 호스트를 지정해야합니다.

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

이것은 어리석은 제안 일 수도 있지만 DB가 여전히 localhost에서 호스팅되는지 100 % 확인하십시오. 예를 들어, 네트워크 관리자가 Amazon DB 호스팅을 선택했거나 변경 한 경우 해당 호스트 이름이 대신 필요합니다!


호스팅 공급자 1and1을 사용하고 있으며 호스트에 ssh-ing 한 후이 오류가 발생했습니다. 수정은 단순히 호스트 이름 "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"을 제공하는 것입니다.
rob

1

필자의 경우 새 데이터베이스를 가져오고 있었고 그 후에 다시 연결할 수 없었습니다. 마침내 나는 그것이 공간 문제라는 것을 깨달았습니다.

따라서 마지막 데이터베이스를 삭제하고 하드 드라이브 또는 내가 한 일을 확장하여 가상 머신의 스냅 샷을 복원 할 수 있습니다.

누군가가 유용하다고 생각하는 경우를 대비하여


0

SSH 클라이언트에서 mysql을 연결하려고 할 때이 문제가 발생하여 소켓 사이를 전환 할 때 도움이되는 명령에 소켓 경로를 추가하는 것이 발견되었습니다.

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

디스크 공간이 부족한 경우 문제가됩니다. 해결책은 HDD에서 약간의 공간을 확보하는 것입니다.

설명을 더 읽으려면 다음을 읽으십시오.

LINUX에서 MySQL을 실행하는 경우 disk free 명령으로 HDD의 여유 공간을 확인하십시오.

 df 

당신이 그런 것을 얻는다면 :

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

그런 다음 이것이 문제이며 이제 해결책이 있습니다!

mysql.sock은 거의 항상 루트 폴더 아래에있는 mysql 폴더에 작성되기를 원하므로 공간 부족으로 인해 달성 할 수 없습니다.

주기적으로 mysql 디렉토리 아래에 ls 명령을 지정하면 (openSUSE 11.1은 / var / lib / mysql에 있음) 다음과 같은 결과가 나타납니다.

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

mysql.sock 파일이 자주 나타나고 사라집니다 (폴더에 mysql.sock 파일이있는 인스턴스를 작성하려면 ls로 할당을 시도해야 함).

디스크 공간이 부족하여 발생합니다.

나는 내가 어떤 사람들을 도울 수 있기를 바랍니다 !!!! 감사!


0

explicit_defaults_for_timestampmy.cnf 에서 비활성화해야했습니다 .


0

먼저 2, 3 솔루션을 시도하십시오. 오류는 여전히 팝업이며 찾을 수없는 경우/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

/ var /에서 사용 가능한 공간을 확인하십시오.

df

디렉토리가 가득 찬 경우 사용하지 않는 일부 파일 / 디렉토리를 제거하십시오.

rm /var/cache/*

아마 당신의 문제는 지금 분류 될 것입니다.


0

sf.net 의 쉘에 있다면 다음 을 시도하십시오.

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

프로젝트 관리자 프로파일의 MySQL 데이터베이스에 표시된대로 {LETTER} 및 {GROUP ID}를 변경하십시오.

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