강좌
클라우드/리눅스에 관한 강좌입니다.
데이터베이스 분류

MYSQL의 root패스워드를 잊어버렸을 때 복구하기

작성자 정보

  • 구돌 작성
  • 작성일

컨텐츠 정보

본문

MYSQL root패스워드를 잊어버렸을 때 복구하기

 

필자와 같은 서버관리자들께서도 간혹 경험해 보셨겠지만 MYSQL데이터베이스를 관리하다보면 MYSQL root패스워드 잊어버리는 경우가 있습니다.   

 

 

  특히 여러대의 서버를 혼자서 관리하시는 분들이라면 이런 경우는 그렇게 흔하지 않게 경험해 보실 수 있습니다.   

 

 

  이런 경우에 유일하게 MYSQL root패스워드를 복구할 수 있는 방법이 있습니다.   

 

 

 

앞에서 설명한 바와 같이 mysqld_safe으로 MYSQL을 시작할 때에 --skip-grant-table옵션을 사용하여 MYSQL grant table권한을 생략하여 실행한 후에 MYSQL root계정으로 패스워드 없이 접속하여 원하는 패스워드로 변경하는 방법입니다.   

 

 



MYSQL
root계정 패스워드를 잊어버렸을 경우의 복구절차는 다음과 같습니다.   

 

 

 

 

1 단계 : 실행중인 MYSQL을 종료한다.
2
단계 : “./mysqld_safe --skip-grant-table &” table grant권한없이 MYSQL을 실행한다.
3
단계 : 패스워드없이 MYSQL root계정으로 MYSQL에 접속한다.
4
단계 : update문으로 mysql데이터베이스의 user테이블에 있는 MYSQL root사용자의 패스워드를 변경한다.
5
단계 : “flush privileges”명령어로 변경된 MYSQL데이터들을 동기화한다.
6
단계 : MYSQL을 빠져나와서 실행했던 MYSQL을 종료한다.
7
단계 : 일반적인 방법으로 MYSQL을 실행한다.
8
단계 : 정상적인 방법으로 패스워드를 사용하여 MYSQL root계정으로 접속하여 확인한다. 

 

위의 단계별로 직접 MYSQL root패스워드를 복구해 보도록 하겠습니다.   

 

 

 

1단계 : 실행중인 MYSQL을 종료한다.

현재 실행되어 있는 MYSQL root패스워드를 잊어버렸기 때문에 실행된 실행중인 MYSQL을 종료합니다.   

 

 

 종료할 때에는 아래 예와 같이 killall명령어를 이용하여 종료할 수 있습니다.   

 

 

 

 

[root@file bin]# ps -ef | grep mysqld

root      4351  4113  0 22:46 pts/0    00:00:00 /bin/sh ./mysqld_safe

mysql     4364  4351  0 22:46 pts/0    00:00:00 [mysqld]

root      4409  4113  0 23:15 pts/0    00:00:00 grep mysqld

[root@file bin]#

[root@file bin]# killall mysqld

[root@file bin]# 040213 23:15:37  mysqld ended

 

 

[1]+  Done                    ./mysqld_safe

[root@file bin]#

 

실행중인 MYSQL을 종료하는 정상적인 방법은 “mysqladmin -u root -p shutdown”을 이용하는 것입니다.   

 

 

 하지만 이 방법은 MYSQL root패스워드를 알아야만 가능한 방법이기 때문에 MYSQL root패스워드를 알지 못하는 현재 상황에서는 부득이하게 killall을 이용하여 MYSQL을 종료합니다.   

 

 

  

 

2 단계 : table grant권한없이 MYSQL을 실행한다.

앞의 예에서 배웠던 대로 table grant권한없이 MYSQL을 다음과 같이 실행합니다.   

 

 

 이렇게 실행된 후에는 패스워드없이 MYSQL 접속을 할 수 있습니다.   

 

 

 

 

[root@file bin]# ./mysqld_safe --skip-grant-table &

[1] 4433

[root@file bin]# Starting mysqld daemon with databases from /usr/local/mysql/data

 

[root@file bin]# ps -ef | grep mysqld

root      4433  4113  0 23:18 pts/0    00:00:00 /bin/sh ./mysqld_safe --skip-grant-table

mysql     4449  4433  3 23:18 pts/0    00:00:00 [mysqld]

root      4459  4113  0 23:18 pts/0    00:00:00 grep mysqld

[root@file bin]#

 

3 단계 : 패스워드없이 MYSQL root계정으로 MYSQL에 접속한다.

아래 예를 보신 바와 같이 패스워드없이 MYSQL root계정으로 MYSQL에 접속을 하였습니다.   

 

 

 

 

[root@file bin]# ./mysql -u root mysql

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.0.14

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql>

 

 

4 단계 : update문으로 MYSQL root사용자의 패스워드를 변경한다.

아래와 같이 MYSQL root계정 패스워드를 ‘111111’으로 변경하였습니다.   

 

 

 이때 update문을 사용하여 변경할 수 있습니다.   

 

 

 

 

mysql> update user set password=password('111111') where user = 'root';

Query OK, 2 rows affected (0.00 sec)

Rows matched: 2  Changed: 2  Warnings: 0

 

mysql>

 

 

5 단계 : “flush privileges”으로 MYSQL데이터들을 동기화한다.

다음과 같이 “flush privileges”명령어로 MYSQL의 데이터들을 동기화 시킵니다.   

 

 

 이것의 의미는 방금 변경된 MYSQL root패스워드를 MYSQL의 캐쉬공간에서 디스크로 저장하여 MYSQL 종료후에도 그대로 적용되도록 하기 위함입니다.   

 

 

 

 

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

 

mysql>

 

 

6 단계 : MYSQL을 빠져나와서 실행했던 MYSQL을 종료한다.

이제 아래와 같이 MYSQL을 빠져나온 후에 table grant권한없이 실행하였던 MYSQL을 종료합니다.   

 

 

 

 

mysql> exit

Bye

[root@file bin]#

[root@file bin]# killall mysqld

[root@file bin]# 040213 23:26:21  mysqld ended

 

 

[1]+  Done                    ./mysqld_safe --skip-grant-table

[root@file bin]#

 

이로써 MYSQL root패스워드가 ‘111111’으로 변경 되었습니다.   

 

 

 이제 변경된 패스워드로 접속을 하여 확인해 보도록 하겠습니다.   

 

 

 

 

7 단계 : 일반적인 방법으로 MYSQL을 실행한다.

이제 MYSQL root패스워드가 ‘111111’으로 변경 되었으므로 일반적인 방법으로 MYSQL을 다음과 같이 실행하였습니다.   

 

 

 

 

[root@file bin]# ./mysqld_safe &

[1] 4469

[root@file bin]# Starting mysqld daemon with databases from /usr/local/mysql/data

 

[root@file bin]#

 

 

8 단계 : 패스워드를 사용하여 MYSQL root계정으로 접속하여 확인한다.

 

이제 변경된 MYSQL root패스워드(‘111111’)를 사용하여 MYSQL로 접속을 하였습니다.   

 

 

  이로써 MYSQL root패스워드가 ‘111111’으로 변경되었음을 확인 하였습니다.   

 

 

 

 

[root@file bin]# ./mysql -u root -p mysql

Enter password:

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.0.14

 

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

 

mysql>

mysql> exit

Bye

 

이렇게 MYSQL root패스워드를 잊어버렸을 경우에는 복구(변경)이 가능합니다.   

 

 

  참고로 일반사용자의 MYSQL패스워드를 잊어버렸다면 MYSQL root계정으로 MYSQL에 접속한 다음 update문으로 변경해 주시면 됩니다.   

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,807 개
  • 현재 접속자 :  160 명