![localhost가 아닌 호스트와 함께 mysql에서 unix_socket을 사용하십시오.](https://rvso.com/image/1609693/localhost%EA%B0%80%20%EC%95%84%EB%8B%8C%20%ED%98%B8%EC%8A%A4%ED%8A%B8%EC%99%80%20%ED%95%A8%EA%BB%98%20mysql%EC%97%90%EC%84%9C%20unix_socket%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
테스트 상자에서 일부 스크립트 동작을 복제하려면 유닉스 소켓을 통해 루트로 mysql을 인증해야 합니다.
sudo mysql에서는 잘 작동하지만 sudo mysql -h testhost를 수행하면 다음과 같은 결과가 나타납니다.
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
내 호스트 파일에 testhost를 추가했습니다.
127.0.0.1 localhost testhost
또한 mysql 보조금도 업데이트했습니다.
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket USING '*59D9CEFB549F231CFA8634AC47153FD4F3CCC29F' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
그리고
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED VIA unix_socket USING '*59D9CEFB549F231CFA8634AC47153FD4F3CCC29F'
답변1
"유닉스 소켓"은 TCP/IP 소켓이 아닙니다. 그들은언제나현재 시스템에만 제한됩니다. 네트워크를 통해 다른 시스템의 소켓에 연결할 수 없습니다.
그 때문에 호스트 이름은 localhost
MySQL에서 특별하고 클라이언트는 실제로 IP 주소를 조회하려고 시도하지 않습니다.조금도. 그리고 여기에 연결하면 127.0.0.1이나 ::1에 연결되지 않습니다. 실제로는 /var/run/mysqld/mysqld.sock
또는 유사한 경로에 연결되는 것입니다.
네트워크 연결을 모방하려면 mysql -h 127.0.0.1
또는 를 실행하십시오 mysql -h ::1
.
네트워크(TCP/IP) 연결할 수 없다를 사용하십시오 IDENTIFIED VIA unix_socket
. 왜냐하면 클라이언트의 UID를 전송하지 않기 때문입니다(특히 보안에 민감한 방식이 아닌 경우). 비밀번호, X.509 인증서 또는 GSSAPI를 사용해야 합니다.