답변:
"localhost"또는 "127.0.0.1"에 연결하고 있습니까? "localhost"에 연결하면 소켓 커넥터가 사용되지만 "127.0.0.1"에 연결하면 TCP / IP 커넥터가 사용됩니다. 소켓 커넥터가 활성화 / 작동되지 않으면 "127.0.0.1"을 사용해보십시오.
/etc/hosts
내 docker 컨테이너 의 파일을 보면 MySql 호스트 이름이 인 것으로 나타났습니다 mysql
. 연결 구성에서 동일한 호스트 이름을 사용하면 문제가 해결되었습니다.
mysql 서비스가 실행 중인지 확인하십시오
service mysqld start
그런 다음 다음 중 하나를 시도하십시오.
(mysql에 비밀번호를 설정하지 않은 경우)
mysql -u root
이미 비밀번호를 설정 한 경우
mysql -u root -p
service mariadb start
있기 때문에 mariadb.org/debian-9-released-mariadb-mysql-variant
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
mariadb-server
및 일부 안전하지 않은 기본 설정을 정리하기 mariadb
위해 실행 mysql_secure_installation
하는 것을 잊지 마십시오 .
내 경우에는 내가 다른 위치의 내부에 소켓 파일을 이동 한 /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]
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
디스크 사용량을 줄이는 데 도움이됩니다.
innodb_buffer_pool_size
습니다 my.cnf
. 작은 값으로 설정하는 것은 innodb_buffer_pool_size = 50M
이 가설을 버리는 좋은 테스트입니다;)
/ var / lib / mysql [파일 복사 또는 바꾸기]에서 파일을 변경하는 경우, 파일 소유자를 mysql로 설정해야합니다. mariadb.service restart가 실패한 경우 매우 중요합니다
chown -R mysql : mysql / var / lib / mysql / *
chmod -R 700 / var / lib / mysql / *
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 /를 사용합니다)
이 오류를 재현하는 한 가지 방법 : 외부 서버에 연결하려고하지만 존재하지 않는 로컬 서버에 연결하려는 경우 :
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 호스팅을 선택했거나 변경 한 경우 해당 호스트 이름이 대신 필요합니다!
디스크 공간이 부족한 경우 문제가됩니다. 해결책은 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로 할당을 시도해야 함).
디스크 공간이 부족하여 발생합니다.
나는 내가 어떤 사람들을 도울 수 있기를 바랍니다 !!!! 감사!