이 글에서는 MySQL root 비밀번호 잊었을 때 root 비번을 재설정하는 해결법 알아보자.
MySQL 프로세스 죽이기
mysqld_safe를 사용하면 비밀번호 없이 MySQL root 계정으로 접속 가능하다. mysqld_safe를 사용하기 위해서는 현재 실행중인 MySQL 프로세스를 먼저 죽여야 한다.
Homebrew로 설치했다면
만약 Homebrew를 이용해서 설치했다면 brew 명령어를 통해 MySQL 프로세스를 종료한다.
brew services stop mysql
$ brew services stop mysql
Stopping `mysql`... (might take a while)
==> Successfully stopped `mysql` (label: homebrew.mxcl.mysql)
Launchctl로 설치했다면
만약 Launchctl를 이용해서 설치했다면 launchctl 명령어를 통해 MySQL 프로세스를 종료한다.
sudo launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
mysqld_safe 실행하기
먼저 mysqld_safe 경로를 확인한다.
which mysqld_safe
/usr/local/bin/mysqld_safe
mysqld_safe를 백그라운드에서 실행시키기 위해 &를 덧붙인다.
/usr/local/bin/mysqld_safe --skip-grant-tables &
(&를 붙이지 않고 명령어를 실행했다면 터미널 새창을 띄어서 이어서 진행한다)
Root 비밀번호 입력 없이 MySQL 접속하기
mysqld_safe 실행하면 Root 비밀번호 없이 Mysql 접속한다.
mysql -u root
mysql 데이터베이스 사용을 선언한다.
mysql> use mysql;
MySQL Root 비번 바꾸기
MySQL 버전에 따라 비번 바꾸는 명령어가 다르기 때문에 먼저 버전을 확인하자.
MySQL 버전 확인하기
mysql -V
다음과 같이 결과가 나온다.
$ mysql -V
mysql Ver 8.0.13 for osx10.14 on x86_64 (Homebrew)
MySQL 5.7 버전 미만 일 경우
구 버전에서는 다음과 같이 비밀번호를 설정할 수 있었다.
mysql> update user set password=PASSWORD("newpassword") where User='root';
MySQL 5.7 버전 이상 일 경우
MySQL 5.7 버전 이상일 경우, user의 비밀번호를 저장하는 password 필드가 사라졌다. 또한 비밀번호를 암호화할 떄 PASSWORD() 함수를 쓰는 것은 권장하지 않는다.
user 테이블 확인하기
mysql> select host, user, plugin, authentication_string, password_last_changed from user;
MySQL 5.7 버전 이상일 경우 다음과 같이 user 테이블 결과값이 출력된다. 비밀번호가 그대로 저장하는 것이 아니라 authentication_string 필드 값에 암호화된 값으로 들어간다. (암호화 방식이 plugin 필드에 들어간다.)
+-----------+------------------+-----------------------+------------------------------------------------------------------------+-----------------------+
| host | user | plugin | authentication_string | password_last_changed |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+-----------------------+
| localhost | tester | mysql_native_password | *F2E31D76033713872F3AB9DE9N039B7E9ED15234 | 2019-03-04 15:33:07 |
| localhost | mysql.infoschema | caching_sha2_password | $A$006$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | 2019-02-08 20:58:03 |
| localhost | mysql.session | caching_sha2_password | $A$006$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | 2019-02-08 20:58:03 |
| localhost | mysql.sys | caching_sha2_password | $A$006$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | 2019-02-08 20:58:03 |
| localhost | root | mysql_native_password | *F1234D76073813872F3AB9DE9LL39B799ED15151 | 2019-02-08 21:01:09 |
+-----------+------------------+-----------------------+------------------------------------------------------------------------+-----------------------+
비밀번호 설정하기
root 비밀번호를 변경하자. mysql_native_password 부분에 암호화 플러그인, yourpassword 부분에는 변경할 새 비밀번호를 입력하면 된다.
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'yourpassword';
변경 사항을 바로 적용하기 위해 flush 명령어를 사용한다.
mysql> flush privileges;
exit 함수로 mysql를 빠져나온다.
mysql> exit;
이제 변경된 비밀번호로 root 계정으로 mysql 접속할 수 있다.