mysqld.sock에 무엇이 포함되어 있어야합니까?


22

/var/run/mysqld/mysqld.sockMySQL 5.1을 설치 (또는 재설치) 할 때 소켓 파일이 컴퓨터에없는 이유를 아는 사람이 있습니까?

현재 mysqld로 서버를 시작하려고 할 때와 같은 오류가 발생 Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect하지만 (우분투 포럼에서 제안한) 해당 이름의 빈 파일을 만들지 못했습니다.

나는 얼마 전에 natty로 업그레이드 할 때까지 mysql과 postgres를 모두 잘 사용했다. 나는 무슨 일이 일어나고 있는지 알아 내려고 두 데이터베이스를 걷는 데 몇 시간을 보냈습니다. postgres를 포기할 수는 있지만 mysql의 사본이 없으면 일할 수 없습니다.

가장 이상한 부분 : 나는 쿠분투를 사용하고 있으며 KDE는 mysql을 사용하여 사용자 권한 등을 저장한다는 것을 알고 있습니다. 이상한 권한 문제가 발생하지 않습니다. MySQL이 실제로 작동한다는 것을 의미하기 위해 이것을 취할 수 있습니까?

어쩌면이 소켓 파일은 natty의 다른 장소에 있습니까? OS를 새로 설치하는 것이 더 쉬울까요? 이 시점에서 나는 시간 낭비를 멈추게 할 어떤 제안에도 열려있다.


먼저 mysql 서버를 시작하면 해당 파일 /var/run/mysqld/mysqld.sock이 생성됩니다. @Paul이 말했듯이 해당 위치에 넣은 모든 파일을 제거해야합니다.
Evan Hu

답변:


18

소켓 파일은 실제로 데이터를 포함하지 않고 전송합니다. 특수 시스템 호출 / 명령으로 작성된 특수한 특수한 유형의 파일입니다. 일반적인 파일이 아닙니다.

서버와 클라이언트가 요청과 데이터를 연결하고 교환하는 데 사용할 수있는 파이프와 같습니다. 또한 로컬에서만 사용됩니다. 그 의미는 파일 시스템에서 합의 된 약속 장소 일뿐입니다.

평범한 오래된 파일을 만들어 그 위치에 넣으면 실제로 파일을 만드는 서버에 방해가되어 로컬 클라이언트가 서버에 연결하지 못하게됩니다.

권장 사항은 위치에 넣은 모든 파일을 제거하는 것입니다. 특수 소켓 파일은 서버에 의해 작성됩니다.


1
소켓 파일에 대한 설명에 감사하고, 단어가 틀린 질문에 대해 죄송합니다. 원래 문제는 소켓 파일이 누락되었다는 것입니다. mysql이 계속 던지는 오류는Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect
Junb

그러나 어떻게 만들어 집니까? 나는 아직도 그것을 가지고 있지 않기 때문에 .. : -s 어떤 생각?
jpganz18

소켓이 해당 위치에있을 것으로 예상하는 mysql 클라이언트가 있지만 서버가 소켓을 만들지 않거나 서버가 실행 중이 아닙니다. 서버가 실행 중이면 / tmp를 찾거나 찾기 또는 찾기를 사용하십시오 소켓 파일을 찾은 다음 -S <소켓 파일 경로>를 사용하여 mysql 클라이언트를 시작하십시오.
sed_and_done

20

을 지정 host=localhost하면 mysql 클라이언트는 .sock파일 이 필요한 유닉스 명명 된 파이프를 사용하여 mysql 서버에 로그인을 시도 합니다.

host = 127.0.0.1을 지정하여 무시할 수 있습니다. 이것은 mysql 클라이언트가 TCP를 사용하여 서버에 연결하게합니다.

MySQL의 문서 에서 가져온 것 :

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass

역사적으로 말해서, 내가 작업 mysql.sock한 모든 MySQL 버전 (4.0으로 돌아 가기)에서 아무런 이유없이 사라지는 것을 보았 기 때문에 실제로 이것은 훌륭한 (그리고 많은 필요) 대답 입니다. 이런 일이 발생하면 다음과 같이 로그인하지만 --protocol=tcp대신을 사용 합니다 --port. mysql을 종료하면 서비스는 소켓 파일을 찾습니다. 따라서 실행 service mysql stop이 실패합니다. 누락 된 소켓 파일 두통을 피하기 위해을 실행 mysqladmin -h127.0.0.1 --protocol=tcp -uroot -p shutdown합니다. 오, BTW, +1 !!!
RolandoMySQLDBA

고맙습니다. 이것은 온라인 어디에서나 첫 번째 대답이었습니다 :) 그리고 그렇습니다. TCP를 사용하는 다른 방법은 --protocol = tcp를 지정하는 것입니다.
sccott

14

소켓은 데이터 저장이 아닌 읽기 및 쓰기로 데이터를 전송하는 데 사용되는 특수한 의사 파일입니다.

소켓 파일은 서비스가 시작될 때 작성되고 서비스가 종료 될 때 제거됩니다. 파일의 위치는 다음과 /etc/my.cnf같이 정의됩니다 .

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

8

제 경우에는 실행 mysqld_safe하면 새 mysqld.sock파일이 만들어졌습니다 .

$ cd /etc/init.d/
$ mysqld_safe

프롬프트가 다시 나타나지 않을 수도 있지만 세션을 다시 시작하면 mysqld.sock 파일이 나타납니다. 로 찾기

$ sudo find / -type s | grep mysqld.sock

2

누락 된 mysqld.sock과 동일한 문제가있었습니다. 나는 mysql을 포함하는 디렉토리, 즉 /usr/bin내 경우에 갔다 . 그런 다음 명령을 내 렸습니다

mysql mysql --host=localhost --password=whatever --port=3306

이중 mysql은 오타가 아니라 mysql은 새로운 MySQL 설치에 항상 존재하는 데이터베이스입니다. 내가 알고하지 않습니다 --host, --password또는 --port필요하지만, 내가 그들을 포함하고 이러한 매개 변수를 사용하여 나를 위해 일하기 때문이다. MySQL이 나타나면 root의 암호를 설정하여 사용자 테이블로 들어갔습니다. MySQL이 나타나면 누락 된 소켓 파일이 생성됩니다. 며칠 동안 고생 한 이후 누군가에게 도움이되기를 바랍니다.


1

nginx php-fastcgi를 사용 중이고 502 Bad Gateway 오류가 발생하면 nginx 구성 파일에서 가상 호스트 구성을 확인해야합니다. 당신은 설정해야하거나 수정 fastcgi_passparameter.The가 fastcgi_pass의 nginx 및 PHP는 CGI 사이의 소켓 연결을 설정하는 변수입니다.

또 다른 문제는 바이너리 시작 스크립트가 다음 항목 (중요)을 놓칠 수 있다는 것입니다. nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

내 시작 스크립트 / usr / bin / php-fastcgi의 전체 내용 :

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.