MySQL 비밀번호 초기화
데이터베이스를 사용하다가 root 계정의 비밀번호를 분실하는 것은 정말 큰 일이다. 그나마 오라클의 경우 OS인증을 통해 좀 더 쉽게 처리할 수 있지만 MySQL은 갈길이 좀 멀다.
이 글은 윈도우용 MySQL 8.0.18 버전을 기준으로 작성되었다.
명령 프롬프트는 관리자 권한으로 사용한다.
서비스 중지
일단 현재 작동중인 서비스를 중지시킨다.
승인 없이 접속할 수 있게 MySql을 시작한다.
기존에 windows에 install 형태로 설치했다면 datadir은 --datadir="C:/ProgramData/MySQL/MySQL Server 8.0/Data"이다. 이 부분을 본인의 Data 경로와 확인하자.
이제 이 콘솔에서 MySql이 시작했으므로 별도의 새로운 콘솔을 이용해서 MySql 서버에 접속한다.
비번 없이 root 계정으로 접속하기
관리자 권한으로 새로운 명령 프롬프트를 실행하고 MySql 서버에 접속한다.
여기서 주의할 점들이 나오는데..
일반적으로 alter user 'root'@'localhost' identified with mysql_native_password by '비밀번호'; 형태의 명령어를 사용하면 지금은 -skip-grant-tables 모드이므로 동작하지 않는다.
그렇다고 무작정 UPDATE user SET authentication_string='비밀번호' WHERE User='root'; 처럼 작성하면 해쉬화가 되지 않기 때문에 나중에 로그인 할 수가 없다.
따라서 일단 비밀 번호를 NULL 로 만들어둔다.
비번 없이 root로 접속한다.
기존 접속을 종료하고 다시 비번 없이 root로 접속한 후 Alter 명령으로 비빌번호를 변경한다.
다시 authentication_string을 조회해보면 해쉬화된 값이 저장됨을 확인할 수 있다. 드디어 비빌번호가 변경된 것이다. 이제 root/1234로 접속이 가능하다.
고려사항
이제 mysql을 정상적으로 시작한다. 즉 기존의 -skip-grant-tables 모드를 종료시키고 mysql 서비스를 시작한다.
비밀번호는 잊어먹지 말자!!!