IT story

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

hot-time 2020. 4. 9. 08:08
반응형

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


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

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

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


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


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

service mysqld start

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

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

mysql -u root

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

mysql -u root -p

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

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

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

mysqladmin -u root -p status

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

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

나를 위해 그것을 해결


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


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

그게 내 문제를 해결했다


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

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

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

mysql -u root -p

내 경우에는 내가 다른 위치의 내부에 소켓 파일을 이동 한 /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]


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

[mysqld]

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

[client]

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

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

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


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

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

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

로 변경

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

에 충분한 공간이 남아 있는지 확인하십시오 /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

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


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

먼저 시작해야합니다

$ sudo systemctl start mariadb

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

$ sudo systemctl start mysqld

그런 다음 mysql을 시작하려면

$ mysql -u root -p

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

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


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

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

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


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

mysql.server start

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

mysql -uroot

시험

echo 0 > /selinux/enforce

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

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

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


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

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

끊임없이 받고 있었다

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

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

shutdown -r now

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


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


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


내 문제는 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이 실행 중이어야합니다.

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


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

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

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

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

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


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

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

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

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


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

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 ~ $

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


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

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

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


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

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

디스크 공간이 부족한 경우 문제가됩니다. 해결책은 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로 할당을 시도해야 함).

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

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


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


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

find /var/ -name mysql.sock

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

df

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

rm /var/cache/*

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


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

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

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

참고 : https://stackoverflow.com/questions/4448467/cant-connect-to-local-mysql-server-through-socket-var-lib-mysql-mysql-sock

반응형