본문 바로가기

코딩

MySQL root 비밀번호 재설정하기

이 글에서는 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 접속할 수 있다.