[MySQL] Cannot Connect to Database Server 에러 (mac)
이 에러가 발생하는 이유는 본 포스팅 외에도 많아서 다른 이유일 수 있음.
오류 발생 이유) 이미 IPv4 주소인 127.0.0.1을 hostname으로하는 커넥션을 생성했는데 또 127.0.0.1을 hostname으로 하는 커넥션을 생성함. 이때 같은 hostname이고 port까지 같아서 같은 커넥션임. 여기서 두 커넥션의 비번을 다르게 설정했기 때문에 한쪽의 커넥션은 연결이 안되는 것.
아무생각 없이 왜 안되지 하다가 127.0.0.1 대신 localhost로 바꾸었더니 갑자기 연결이 됨.
이 경우 localhost가 IPv6 주소인 ::1로 매핑이 되었기 때문에 다른 커넥션으로 인식되서 연결이 된 것.
(localhost는 기본적으로 IPv4, IPv6 둘다 매핑이 가능)
해결) port가 같으면 당연히 hostname은 다르게 설정해줘야 한다..
추가)
Spring Project에서도 커넥션이 안됐었다.
주소는 마찬가지로 localhost였다.
jdbc:mysql://localhost:3306/...
나의 경우 mysql을 local에 homebrew로 설치해서 사용하고 있었는데, 이번 프로젝트에서 도커 mysql을 사용하기로 해서 mysql 컨테이너를 만들었다.
그런데 이때의 경로도 기존에 사용하던 경로와 같은 localhost:3306이었다. 이미 기존에 localhost(127.0.0.1)를 사용하고 있었으므로 이 컨테이너의 경로는 localhost(::1)이다. 그런데 일반적인 상황에서 localhost를 사용하면 127.0.0.1로 인식이 되었다.
따라서 도커의 mysql 컨테이너를 사용하기 위해서는 hostname을 명시적으로 ::1로 설정 해주어야 했다.
이러한 이유로 도커의 mysql에 연결하기 위해서는 스프링에서도 주소를 맞춰주어야 한다.
jdbc:mysql://::1:3306/...
근데 그냥 포트를 커넥션마다 다르게 설정하는게 맘 편하다.(무조건)
추가)
workbrench에서 hostname을 모두 localhost로 설정하고, port를 다르게 설정해도 연결이 되지 않았다.
생각해보니 mysql 자체에 기본적으로 port가 3306이기 때문에 3307로 바꿔주어야 한다.
/opt/homebrew/etc/my.cnf // homebrew 기준
이 경로에서 [mysqld] 하위에 port=3307를 넣어주어야 한다.
결론) mysql 중복 설치 시 포트를 다르게 설정해줘야 충돌이 나지 않는다.