
우리는 Vagrant에서 Ubuntu 서버 13.10을 실행하고 있는데 흥미로운 문제를 발견했습니다.
conf.d/my.cnf의 소켓 위치를 재정의하고 있습니다.
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld_safe]
socket = /tmp/mysql.sock
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysql.pid
socket = /tmp/mysql.sock
port = 3306
datadir = /var/lib/mysql
bind-address = 0.0.0.0
여태까지는 그런대로 잘됐다. 서버를 시작하면 실제로 /tmp를 수신하는 소켓이 있습니다.
그러나 슈퍼유저만 접근할 수 있습니다!
수퍼유저가 아닌 경우 mysql -u root -pXXXX는 다음 오류가 발생합니다.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
클라이언트가 잘못된 소켓에 연결을 시도합니다.
우리는 권한이 없는 사용자가 올바른 소켓을 찾기 위해 conf 파일에 액세스할 수 없다는 것이 문제라고 가정했으며 실제로 /etc/mysql에 대한 권한을 0755로 변경하면 이 문제가 해결되지만 그렇지 않은 것 같습니다. 올바른 수정.
참고로 12.04에서 이 동작은 동일하지만 mysql이 시작될 때 /tmp에 소켓을 생성하고 /var/run/mysqld 아래에 심볼릭 링크도 생성한다는 사실로 인해 가려집니다. 연결하려면 기본 소켓을 찾습니다.
두 시스템 모두에서 mysql 버전은 5.5.37입니다.
답변1
아래의 정확한 구성에 따라 연결 문제를 해결하기에 충분할 수 있습니다.
--socket=/tmp/mysql.sock을 사용하여 mysql을 시작할 수 있습니다.
~로부터MySQL 매뉴얼
--socket=path, -S path
localhost에 대한 연결의 경우 사용할 Unix 소켓 파일 또는 Windows의 경우 사용할 명명된 파이프의 이름입니다.
사용자가 전체 mysql 구성을 읽지 못하도록 설정을 저장하려면 ~/.my.cnf 파일의 설정을 변경할 수 있습니다.
보다옵션 파일자세한 내용은
귀하의 경우 이 파일에 소켓=/tmp/mysql.sock을 추가합니다.
답변2
방금 Ubuntu 14.04를 새로 설치한 것을 보았으며 /etc/mysql의 기본 권한은 755입니다. 솔직히 말해서 이것이 왜 문제라고 생각하는지 이해가 되지 않습니다.