docker-compose 파일로 데이터베이스 스키마를 만든 다음,
스프링 애플리케이션을 실행하려고 하니 unknown database라는 메시지가 떴다.
워크벤치로 확인할 때는 정상적으로 접근할 수 있었다.
3306 포트를 조회했을 때 몇 가지 프로세스들이 보여서 3306 포트를 사용하는 것들을 다 kill 해버렸다.
다른 건 다 죽었는데 mysqld는 죽여도 죽여도 다시 살아났다. 그렇게 그냥 토요일 공부를 접었고 일요일이 되었다.
여기서도 마찬가지로 로컬 mysql이 실행 중인지 확인하고 죽인 뒤에 다시 시도하라는 이야기가 나왔다.
$mysqladmin shutdown # 3306 포트로 실행 중인 mysql이 죽기는 하지만 바로 다시 살아남
$mysql.server stop # 3306 포트로 실행 중인 mysql이 죽기는 하지만 바로 다시 살아남
$brew services stop mysql # 실행 중인 mysql 없다고 나옴.
임시 방편으로 3306말고 3307포트로 바꿔서 docker-compose를 다시 올려서 해결했다.
그런데 mysql이 도대체 왜 종료가 안 되는 걸까? 분명히 brew로 받았고, 실행 중인데, 왜 실행 중이지 않다고 뜰까?
$brew services list
오잉? 입사하고 개발환경 세팅할 때 5.7버전 쓴다고 해서 버전을 명시해서 받은 기억이 떠오름. 그런데 이런 게 영향을 끼치나 싶었지만 혹시나 하는 마음에 버전을 명시해서 stop 명령어를 다시 날려봤다.
$brew services stop mysql@5.7
그 다음 3306 포트를 조회해보니 사용 중인 곳이 없다고 떴다. 허탈했다.
근데 여기서 궁금증은
2번인데... 왜 동일한 로컬 mysql와 도커 mysql이 올라갈 수 있는 걸까? Spring만 생각해봐도 8080포트가 실행 중이면 이미 실행 중인 포트라는 conflict 에러를 내뿜고 실행되지 않는데 말이다.
처음엔 이런 생각을 해봤다.
로컬에서 실행되는 mysql의 경우 주소가 localhost(127.0.0.1):3306이다. docker로 띄운 mysql 서버는 이 주소가 다른 게 아닐까?
근데 이건 틀린 것 같다. 워크벤치나, spring 설정파일에서 localhost:3306으로 접근하라고 명시해도 docker mysql로 잘 접근하기 때문이다.
정확한 원인은 못 찾았지만 추측하는 건...
로컬 mysql은 위에서 말한 것처럼 127.0.0.1:3306으로 실행되는 반면 docker mysql *:3306으로 실행된다. docker 대시보드로 확인하면
이렇게 나온다.
왜 이런지는 모르겠지만.. 어쨌든 이게 충돌을 방지하는 거 아닐까?