[MySQL] Access denied for user 'root'@'localhost' (using password: YES)
2023.02.19
시도 1) 플로그인 바꿔주기
처음에 안되서 구글링을 해보니, plugin 이 'auth_socket' 이라서 그렇고, 'mysql_native_password' 로 바꿔주면 된다고 했다. 내가 쓰던 mysql2 는 caching_sha2_password 플러그인도 마찬가지라고 적혀있어서 plugin을 업데이트 했다.
mysql> use mysql;
mysql> select user,host,plugin from user;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'root'
결론 : 효과가 없었다.
시도2) 삭제후 다시 새로운 유저로 만들어주기
create user 'root'@'localhost' identified WITH caching_sha2_password by 'root';
grant all privileges on *.* to 'root'@'localhost' identified by 'root';
flush privileges;
결론 : 효과가 없었다. 계속 ACCESS DENIED 에러가 떴다.
생각한 문제 :: 내가 참고한 강의는 mysql:5.7 이미지를 사용하고 있었는데 나는 mysql 최신버전을 사용하고 있어서 내가 모르는 문제 (ex. 비밀번호 해싱문제) 가 있었을 것이라고 생각함.
시도3) 최신버전인 mysql 이미지를 삭제하고 아예 강의대로 mysql:5.7 버전을 pull
docker pull mysql:5.7
결론: error 발생
시도4) shell 말고 yml 파일 만들어주기
version: '3'
services:
local-db: #db 로 하면 안되고 local-db 라고 써야함
image: library/mysql:5.7
container_name: myapp
restart: always
ports:
- "3306:3306" #HOST:CONTAINER
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- ./db/mysql/data:/var/lib/mysql
- ./db/mysql/init:/docker-entrypoint-initdb.d
platform: linux/amd64
docker-compose up -d
결론: 이미지는 다운로드 됨! 하지만 3306 포트가 사용중이라는 에러발생. 따라서 컨테이너가 만들어졌지만 실행이 안됨. (나는 이미지도, 컨테이너도 이전에 만든적이 없어서 이 포트를 사용할 인스턴스가 없는데 말이다!)
시도5) sudo 로 3306 port 사용하는 프로세스 강제종료
sudo lsof -i tcp:3306
sudo kill -9 [PID]
결론: 삭제가 되긴 했으나 계속 인스턴스가 재생성되서 결국 제자리. Mysql workbench 에서도 마찬가지
시도6) mysql (image 말고 macos 에 설치된거 제거)
생각해보니, 나는 대학교 과제를 하면서 mysql (도커말고 진짜 다운로드한거) 을 설치했던적이 있다.
Apple icon->시스템 환경->MySQL 아이콘
을 클릭했더니, 거기에서 컴퓨터 실행하면 항상 3306 포트로 서버가 돌아가게 설정이 되어있던 것...
그래서 그 mysql를 uninstall 해서 삭제하고 yml 파일을 다시 실행해줬더니 됐다!!
결론적으로, 에러가 떴던 것은 나는 docker 로 mysql:5.7 버전의 이미지를 사용해서 포트 3306 을 쓰려고 했으나, 내가 이전에 설치한 mysql 이 항상 컴퓨터가 켜질때마다 3306 포트를 쓰고 있게 돌아가고 있어 충돌이 일어났기 때문이었다!!