Docker Compose로 Mysql 실행 시 Access denied for user ‘root’@’localhost’ (using password:YES) 해결

Jeong Choi(최현정)·2023년 11월 18일
2

에러모음

목록 보기
3/6

1) 상황

nest와 mysql을 docker로 돌려서 개발을 진행하고 있었다. 팀원이 내 docker compose를 build해서 백엔드 서버를 실행하자마자 아래와 같은 에러가 떴다.

[MY-013360][Server] Plugin sha256_password reported: ''sha256_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'

처음에는 이 에러를 보고 아 mysql 8.0 버전 이상이라서 이 에러가 뜨나 싶었다. 그러나 신기한 것은 내 mac에서는 mysql이 아무런 이상없이 잘 실행되었으며, docker mysql terminal로 들어가 root로 로그인도 되는 상황이였다.

그러나 내 팀원은 docker mysql terminal에 들어가 root로 로그인을 하면 아래와 같은 에러가 발생했다. 분명히 root password도 알맞게 입력했는데도 말이다.

Access denied for user ‘root’@’localhost’ (using password:YES)

2) 해결 방안

결론부터 말하자면 docker volume 때문이였다. 아무리 생각해봐도 이상했던게 왜 나는 mysql이 정상적으로 돌아가고, 내 팀원들은 mysql이 돌아가지 않는 가 이 문제부터 출발했다.

Docker volume이란 container의 데이터를 보관하는 데 사용되며, 해당 container를 삭제하거나 다시 시작해도 해당 데이터들을 유지하는 공간이다.

mysql의 container의 volume에는 데이터베이스의 파일들을 저장하는 데 사용되는데 내 팀원들 같은 경우에는 전에 사용했던 mysql container의 volume과 현재 내가 compose한 mysql container의 volume이 서로 충돌해서 생긴 문제였다.

나는 항상 docker를 down 시킬때마다 volume까지 삭제하기 때문에 이런 문제가 생기지 않았던 것이였다.

그렇다면 volume을 삭제하면 해당 문제를 해결할 수 있겠다 생각했다. 터미널에 아래와 같이 입력해주면 에러가 해결된다.

1) docker-compose down -v // 모든 docker container의 volume을 삭제함

2) docker-compose up --build // docker contanier가 새로 생성 및 초기화

1번과 2번을 터미널에 입력하면 정상적으로 docker로 돌린 mysql이 실행될 것 이다.

profile
Node와 DB를 사랑하는 백엔드 개발자입니다:)

0개의 댓글