'localhost'를 사용하여 MySQL에 연결할 수 없지만 '127.0.0.1'을 사용하면 괜찮습니까?


12

내 / etc / hosts 파일은 다음과 같습니다.

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

서버를 구축하는 동안 Postfix 및 Apache 및 Dovecot와 같은 서비스에 대한 특정 구성 파일에서 localhost를 성공적으로 핑할 수는 있지만 작동시키기 위해 127.0.0.1대신 지정해야 한다는 것을 알았 localhost습니다.

또한 localhostMySQL에 연결 하는 데 사용되는 특정 데이터베이스 기반 웹 사이트의 구성 파일을 변경해야했습니다 .

hosts파일 을 다양하게 수정 했지만 지금까지 시도한 내용이 도움이되지 않았습니다.

서버가 Ubuntu 12.04.02 LTS를 실행 중입니다. selinux가 설치되어 있지 않으며 IPtables 기본 정책을 수락하고 플러시하도록 설정 한 후에도 위 상황이 유지됩니다.

답변:


15

확인해야 할 사항은 (MySQL 콘솔에 로그인해야 함)-를 root통해 로그인 할 수있는 권한이 있는지 확인하십시오 localhost.

mysql -h 127.0.0.1 -u root -p

-로그인에 성공하면-

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

이것이 문제가되는 경우를 대비하여 그냥 버립니다.


당신이 올바른 길을 가고 있다고 생각합니다. 나는 그것을했고 루트 및 두 명의 다른 사용자가 localhost를 위해 생성되었지만 사용자를위한 호스팅 제어판이 만든 모든 사용자를위한 것임을 알 수 있습니다 127.0.0.1(인 경우 제외 %). 나는 이것이 아마도 그것을 고칠만큼 충분히 밝을 것이라고 생각하므로 잠시 동안 당신의 대답을 받아 들일 것입니다.
Peter Snow

도와 주셔서 감사합니다! 변경 사항을 적용하려면 mysql.user 테이블을 업데이트 한 후 mysql 서버를 다시 시작해야한다고 추가하고 싶습니다.
lackovic10

허용되지만 mysql의 경우 일반적으로 문제는 아닙니다. 대신 EEAA의 답변을 참조하십시오 (mysql localhostsocket대신 대신 해석합니다 TCP).
ToolmakerSteve

8

대부분의 MySQL 클라이언트는 호스트를로 지정하면 localhostTCP 연결 대신 소켓 연결로 별칭을 지정한다는 사실이 이상 합니다. 옵션은 127.0.0.1클라이언트가 지원하는 경우 (mysql CLI 바이너리가 --protocol플래그를 사용하는 것처럼) 유닉스 소켓 대신 TCP를 사용하도록 강제하는 것입니다.


감사합니다 EEAA. 문제는 Joomla 설치 프로그램과 같은 작업이 실패한다는 것입니다. 설치하는 동안 호스트 이름 필드에 127.0.0.1대신 지정 localhost하면 설치 경로가 엉망이되어 다른 오류가 발생하지만 localhost를 지정하면 데이터베이스에 연결하지 못합니다! 이 상황의 원인은 무엇입니까? 왜 가지고 있습니까?
Peter Snow

3
@PeterSnow MySQL 구성에서 Unix 도메인 소켓을 설정하십시오.
Michael Hampton 1

감사합니다 @MichaelHampton 지난 30 분 동안 검색했지만이 설정 방법을 찾을 수 없습니다. 기사를 알려 주시거나 아이디어를주세요. 내가해야합니까 socket = /var/run/mysqld/mysqld.sock에서 my.cnf, 파일 권한 777 감사와 MySQL을 소유, 기존된다.
Peter Snow

@PeterSnow 변경 후 mysqld를 다시 시작 했습니까?
EEAA

현재 Joomla 설치 스크립트를 통해 사용하려고합니다. http 페이지는 호스트 이름을 묻습니다. 내가 선택 127.0.0.1하면 작동하지만 (스크립트는 나중에 항목을 사용하고 해결할 수있는 이름이 필요하기 때문에 실패합니다 localhost),을 사용 localhost하면 연결하여 데이터베이스를 만들면 실패합니다.
Peter Snow


1

다음과 같은 권한을 확인할 수 있습니다.

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

이것이 0 0.0.0.0:*에서 수신 대기 중이라면 모든 사람이 해당 mysql에 액세스 할 수 있음을 의미합니다.

my.conf 파일에서이 바인딩을 편집 할 수 있습니다. 리눅스의 기본 경로는 다음과 같습니다.

[learner@localhost ~]$ sudo vi /etc/my.cnf

my.conf 파일에 다음 행을 추가하여 원하는 ip를 허용하십시오.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0

이미 답변을 수락했지만 정보에 대해 a_learner에게 감사드립니다.
피터 스노우

0

PHP는 여전히 기본 소켓 위치를 사용하려고합니다. MariaDB / MySQL 폴더를 / var / lib / mysql 에서 다른 위치 로 이동 한 경우이 문제가 발생할 수 있습니다. 문제를 해결하려면 /etc/php.ini 파일 에서 새 소켓의 위치를 ​​정의해야 합니다.

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

0

symlink를 만들어서이 문제를 해결했습니다 sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock. 그러나 먼저 /var/run/mysqld/폴더가 존재하지 않았기 때문에 폴더를 만들어야합니다 .


-1

/ tmp에 mysql.sock이 필요합니다

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

그 후에 잘 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.