개발공부/MySQL

[MySQL] Access denied for user 'root'@'localhost' (using password: YES)

Michelle Kim 2023. 2. 19. 11:44

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 포트를 쓰고 있게 돌아가고 있어 충돌이 일어났기 때문이었다!!