Programming

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

procodes 2020. 2. 27. 22:26
반응형

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


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]

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

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

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

mysqladmin -u root -p status

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

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

나를 위해 그것을 해결


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)

도움이 되길 바랍니다.


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


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

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

그것은 효과가 있었다


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


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

shutdown -h now

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

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

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

service mysqld start

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


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

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

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

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


또 다른 해결 방법은 /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 소스 배포


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

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

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

-h는 호스트를 의미 하고 -p는 port를 의미한다는 것을 기억하십시오 .


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

sudo 서비스 mysql 중지

sudo 서비스 mysql 시작

sudo 서비스 아파치 2 중지

sudo 서비스 아파치 2 시작


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

 /etc/init.d/mysqld start

그래서 .. 바보 같은 실수.


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

df -h

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


-h (호스트) 및 -P (포트)로 시도하십시오.

mysql -h 127.0.0.1 -P 3306 -u root -p


sudo service mysql start

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


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

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

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

시작해야합니다.


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


또한 이것이 권한 문제라는 것을 알았습니다. 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* 

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를 다시 시작할 수있었습니다.


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

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

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


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

cd /etc/mysql

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

nano my.cnf

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

바인드 주소 = 127.0.0.1

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

service mysql start

nano (텍스트 편집기)가없는 경우 nano를 설치하고 apt-get install nanoCtrl + X를 눌러 한 번만 종료하면 동일한 파일을 저장하고 사용하려면 Y라고 말하지 마십시오.


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

/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

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


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


첨가

--protocol=tcp 

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


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

sudo /etc/init.d/mysql restart

나는 오늘이 문제에 부딪쳤다. 이 답변들 중 어느 것도 해결책을 제공하지 못했습니다. 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없이 명령을 실행할 때만 가능했습니다. 사용 권한 확인에 실패하면 디스크가 가득 찼습니다 (파티션이 가득 차 있지 않은 경우에도).


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');

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


sudo service mysqld start

나를 위해 일했다, 나는 Centos를 사용하고있다.


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


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

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

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


방금이 문제가있었습니다. 하루를 확인한 후 마침내 mysql.sock 파일이 MariaDB가 시작될 때 생성되고 MariaDB가 종료되면 제거됩니다. MariaDB가 실행되고 있지 않으면 존재하지 않습니다. MariaDB를 설치하지 않았을 수 있습니다. 아래 지침을 따르십시오 : https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST


localhost 대신 -h에 127.0.0.1을 사용했는데 모든 것이 정상이었습니다. 다른 경우에는 위의 오류가 발생했습니다.

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



반응형