Anything

[MySQL] MySQL root 비밀번호를 잊었을 때

씬프 2021. 8. 13. 12:00
반응형

MySQL을 사용할 일이 없어 설치 후 방치해둔 상태였다.

다시 사용할 일이 생겨 MySQL을 찾았는데, 다행히도 설치해둔 경로는 바로 찾을 수 있었다.

그런데, root 비밀번호를 모르겠다...

 

1. 다시 MySQL을 설치하자.

기존에 사용하던 MySQL이 아니라 새로 받으면 root에 대한 설정이 없을 것이라고 판단했다.

그래서 MySQL을 다시 설치했지만, 접속할 수 없었다.

 

2. 서버인증을 우회하고, MySQL에 접속해 root 비밀번호를 변경하자?

mysqld --skip-grant-tables

위 명령어를 사용하면 새로운 프롬프트 창에서 MySQL에 서버 인증 없이 우회해 접속할 수 있다.

접속하고 mysql database에 접근해 user table에서 root 계정의 비밀번호를 변경하려한다.

 

use mysql;

mysql database에 접근한다.

 

MySQL Error 1049.

 

mysql database가 없다. mysql이 설치된 디렉터리에 찾아가보니, data 디렉터리가 존재하지 않는다.

MySQL 공식문서에는 data 디렉터리 초기화하는 방식이 자세히 나와있다.

 

 

MySQL :: MySQL 5.7 Reference Manual :: 2.10.1 Initializing the Data Directory

2.10.1 Initializing the Data Directory After MySQL is installed, the data directory must be initialized, including the tables in the mysql system database: For some MySQL installation methods, data directory initialization is automatic, as described in Se

dev.mysql.com

 

다시 명령 프롬프트로 돌아와서

mysqld --initialize --basedir={PATH}/mysql --datadir={PATH}/mysql/data

data 디렉터리를 초기화 시켜줬다.

 

3. 다시 비밀번호 변경하러 가자.

이제 다시 MySQL에 접속하면 mysql database와 그 내부에 user table이 존재하는 것을 볼 수 있다.

UPDATE user SET authentication_string=password('NewPassword') WHERE user='root';

 

user table에 비밀번호는 authentication_string 컬럼명을 가지고 있다. 

 

warning. 더 이상 password() 함수는 사용하지 않는다. (그래도 변경되는 것으로 보임)

허나 접속할 수 없었다.

 

password 함수를 SHA2('NewPassword', 256)로 진행했더니, 패스워드는 변경되었으나, 접속할 수 없었다.

 

더 찾아보니 5.7 이상 버전에서는 더 이상 UPDATE로 비밀번호를 변경하지 않는다.

alter user를 통해 user 정보를 변경한다.

alter user 'root'@'localhost' indentified by 'NewPassword';

 

MySQL Error 1396.

 

보통 이미 만들어진 유저를 추가할 때 생기는 에러라고 한다. 이미 존재하는 유저를 삭제하고 다시 만들면 된다고 한다.

root를??

해결된다면 아래로... 가야하는데...

 

결국 다시 설치해서 사용했다.

 

 

그리고 변경된 사항을 적용한다.

(만약 위에 SQL문이 --skip-grant-tables로 불가능할 경우 먼저 아래 명령어를 실행하면 가능하다.)

flush privileges;

 

4. MySQL에 root 사용자로 접속하자.

이제 MySQL에 접속한다.

mysql -u root -p

그리고 설정한 비밀번호로 접속한다.

'Anything' 카테고리의 다른 글

[CSS] CSS 속성 정리하기  (0) 2021.10.29
[MySQL] Error 1251 ER_NOT_SUPPORTED_AUTH_MODE  (0) 2021.08.17
Git reset 후 되돌리기  (0) 2021.08.09
Ajax  (0) 2021.07.27
사용자 인증 방식 (쿠키, 세션, 토큰)  (0) 2021.07.19