본문 바로가기
Programming/MySQL

[WSL] CentOS 7 MySQL 5.7 root 계정 패스워드 분실 문제 해결

by 8ugust 2022. 1. 13.

 MySQL 2002 에러 해결한다고 몇 번 재설치 과정을 거쳤더니 root 계정 비밀번호가 초기화 되었다. MySQL 서비스 최초 실행 시 root 계정 비밀번호는 임시로 할당되어  /var/log/mysqld.log  파일에서 찾아볼 수 있는데, 문제는 이놈의 기억력 때문에 하루만에 재설정한 비밀번호를 까먹어버렸다😅

 

 워낙에 많은 사람들이 겪는 상황인 만큼 해결 방법을 매우 쉽게 찾을 수 있었다.  /usr/bin/mysqld_safe --skip-grant-tables  명령어로 MySQL에 접속한 뒤 root 계정 비밀번호를 변경해주면 된다고 하던데, 이상하게도 나는 해당 디렉터리에 mysqld_safe 라는 실행파일이 없었다.

 

 mysqld_safe는 mysql이 안전하고 정상적으로 실행되는지 감시하는 기능을 수행한다고 한다. 즉 우리가 mysql을 호출하는 건 mysqld_safe를 통해 mysql을 바라보는 것과 같다는 것이다. 따라서 위 명령어처럼 mysqld_safe 에 --skip-grant-tables 옵션을 통해 root 계정을 비밀번호 없이 로그인 할 수 있었는데, 문제는 CentOS 7의 MySQL 5.7 이상의 버전부터 mysqld_safe의 기능을 systemctl이 대신하고 있다고 한다.

 

$ /usr/bin/mysqld_safe --skip-grant-talbes
bash: /usr/bin/mysqld_safe No such file or directory

$ mysqld_safe --skip-grant-tables
bash: command not found

 

따라서 매우 쉽게 검색되는 방법으로는 내 root 계정의 암호를 초기화시킬 수 없다. 결론부터 말하자면 --skip-grant-tables 옵션을 사용하는 건 맞지만, 기존과 조금 다른 방법으로 옵션을 사용해야한다. 지금부터 그 방법을 구구절절 설명하지 않고 간단하게 방법만 나열하도록 하겠다.

 

 


1. MySQL 버전 확인 및 my.conf 파일 찾기

$ mysql --version
mysql Ver 14.14 Distrib 5.7.36, for Linux (x86_64)

$ whereis my.conf
my: /etc/my.conf

 

 

2. my.conf에 skip-grant-tables 옵션 추가

$ vi /etc/my.conf

.
.
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysqld/mysql.sock
skip-grant-tables

:wq!

 

 

3. MySQL 서비스 재시작

$ systemctl restart mysqld
$ mysql

.
.
Welcome to MySQL monitor.
Your MySQL connection is 2.
Server version: 5.7.36 MySQL Community Server (GPL)
mysql>

 

 

4. Root 계정 패스워드 변경

# version 5.7.6 이상
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '패스워드';


# version 5.7.0 ~ 5.7.5
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('패스워드') WHERE user='root' AND Host='localhost';
mysql> FLUSH PRIVILEGES;


# version 5.7 미만
mysql> UPDATE mysql.user SET password=PASSWORD('패스워드') WHERE user='root' AND Host='localhost';
mysql> FLUSH PRIVILEGES;

 

 

5. MySQL 서비스 재시작 및 Root 계정 로그인

$ systemctl restart mysqld
$ mysql -u root -p 패스워드

.
.
Welcome to MySQL monitor.
Your MySQL connection is 2.
Server version: 5.7.36 MySQL Community Server (GPL)
mysql>

 

 

6. my.conf 파일 원복

$ vi /etc/my.conf

.
.
[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysqld/mysql.sock
# skip-grant-tables

:wq!

 

 

WSL 재부팅에도 잘 동작하고 있음을 확인했다.

댓글