MySQL강좌12편: MYSQL의 root패스워드를 잊어버렸을 때 복구하는 방법
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 5,485 조회
- 0 추천
- 목록
본문
MySQL강좌12편: MYSQL의 root패스워드를 잊어버렸을 때 복구하는 방법
앞에서 설명한 바와같이 mysqld_safe으로 MYSQL을 시작할 때에 --skip-grant-table옵션을 사용하여 MYSQL의 사용자인증과정을 생략하여 실행한 후에 MYSQL의 root계정으로 패스워드없이 접속하여 원하는 패스워드로 변경하는 방법이다.
즉 MYSQL의 root계정 패스워드를 잊어버렸을 경우의 복구절차는 다음과 같다.
1 단계 : 실행중인 MYSQL을 종료한다.
2 단계 : “./mysqld_safe --skip-grant-table &” 을
실행하여 MYSQL을 실행한다.
3 단계 : 패스워드없이 MYSQL root계정으로 MYSQL에 접속한다.
4 단계 : update문으로 MYSQL root사용자의
패스워드를 변경한다.
5 단계 : “flush privileges”명령어로 변경된 MYSQL 권한테이블(db, user테이블들)들에 변경된
권한설정들을 적용한다.
6 단계 : MYSQL을 빠져나와서 실행했던
MYSQL을 종료한다.
7 단계 : 일반적인 방법으로 MYSQL을
실행한다.
8 단계 : 정상적인 방법으로 패스워드를 사용하여
MYSQL의 root계정으로 접속하여 확인한다.
위의 단계별로 직접 MYSQL의 root패스워드를 복구해보도록 하겠다.
1단계 : 실행중인 MYSQL을 종료한다.
현재 실행되어있는 MYSQL의 root패스워드를 잊어버렸기 때문에 실행된 실행중인 MYSQL을 종료해야 한다. root패스워드를 잊어버리지 않은 정상적인 경우라면 mysqladmin을 이용해서 MYSQL을 종료할 수 있지만 현재상태에서는 MYSQL의 root패스워드를 모르는 상황이므로 killall명령어를 이용하여 종료할 수 밖에 없다.
[root@sulinux bin]#ps -ef| grep mysqld
root 2681 2390 0 23:31 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe mysql 2771 2681 0 23:31 pts/0 00:00:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --log-error=/usr/local/mysql/data/sulinux.net.err --pid-file=/usr/local/mysql/data/sulinux.net.pid --socket=/tmp/mysql.sock --port=3306 root 2777 2390 0 23:31 pts/0 00:00:00 grep --colour=auto mysqld [root@sulinux bin]# [root@sulinux bin]#killall mysqld
[root@sulinux bin]#090428 23:31:45 mysqld_safe mysqld from pid file /usr/local/mysql/data/sulinux.net.pid ended
[1]+ Done /usr/local/mysql/bin/mysqld_safe [root@sulinux bin]# |
실행중인 MYSQL을 종료하는 정상적인 방법은 “mysqladmin -u root -p shutdown”을 이용하는 것이다. 하지만 이 방법은 MYSQL의 root패스워드를 알아야만 가능한 방법이기 때문에 MYSQL의 root패스워드를 알지 못하는 현재 상황에서는 부득이하게 killall을 이용하여 MYSQL을 종료한다.
2 단계 : table grant권한없이 MYSQL을 실행한다.
앞의 예에서 배웠던 대로 table grant권한없이 MYSQL을 다음과 같이 실행한다. 즉 --skip-grant-table 옵션을 줘서 MYSQL을 다음과 같이 실행하면 패스워드없이 MYSQL 로 바로 접속이 가능하다. 이 옵션으로 실행하면 심지어 다음과 같은 작업들이 가능하다.
. 패스워드를 지정하는 -p옵션없이 접속할 수 있다.
. 어떤 패스워드를 입력하더라도 조건없이 바로 접속된다.
. -p옵션을 지정해도 되고 지정하지 않아도 된다.
이제 다음과 같이 MYSQL을 실행해본다.
[root@sulinux bin]#/usr/local/mysql/bin/mysqld_safe --skip-grant-table & [1] 2781 [root@sulinux bin]#090428 23:39:54 mysqld_safe Logging to '/usr/local/mysql/data/sulinux.net.err'. 090428 23:39:54 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
[root@sulinux bin]# [root@sulinux bin]#ps -ef | grep mysqld root 2781 2390 0 23:39 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --skip-grant-table mysql 2877 2781 1 23:39 pts/0 00:00:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --skip-grant-table --log-error=/usr/local/mysql/data/sulinux.net.err --pid-file=/usr/local/mysql/data/sulinux.net.pid --socket=/tmp/mysql.sock --port=3306 root 2881 2390 0 23:39 pts/0 00:00:00 grep --colour=auto mysqld [root@sulinux bin]# |
3 단계 : 패스워드없이 MYSQL root계정으로 MYSQL에 접속한다.
아래 예와 같이 패스워드없이 MYSQL의 root계정으로 MYSQL에 접속하였다.
[root@sulinux bin]#/usr/local/mysql/bin/mysql -u root mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.1.32 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
|
4 단계 : update문으로 MYSQL root사용자의 패스워드를 변경한다.
아래와 같이 MYSQL의 root계정 패스워드를 update 문을 이용하여 ‘11111111’로 변경하였다.
mysql> update user set password=password('11111111') where user='root'; Query OK, 0 rows affected (0.01 sec) Rows matched: 3 Changed: 0 Warnings: 0
mysql> |
5 단계 : “flush
privileges”으로 MYSQL데이터들을 동기화한다.
다음과 같이 “flush privileges”명령어로 MYSQL의 데이터들을 동기화시킨다. 이 의미는 방금 변경된 MYSQL의 root패스워드가 mysql데이터베이스내에 있는 권한테이블들(db, user테이블들)에 적용되도록하기 위한 것이다.
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
mysql> |
6 단계 : MYSQL을
빠져나와서 실행했던 MYSQL을 종료한다.
이제 아래와 같이 MYSQL을 빠져나온 후에 table grant권한없이 실행하였던 MYSQL을 종료한다.
mysql> exit
Bye [root@sulinux bin]# [root@sulinux bin]#killall mysqld [root@sulinux bin]#090428 23:58:37 mysqld_safe mysqld from pid file /usr/local/mysql/data/sulinux.net.pid ended
[1]+ Done /usr/local/mysql/bin/mysqld_safe --skip-grant-table [root@sulinux bin]# |
이로써 MYSQL의 root패스워드가 ‘11111111’로 변경되었다. 이제 변경된 패스워드로 접속하여 확인해보도록 하겠다.
7 단계 : 일반적인
방법으로 MYSQL을 실행한다.
이제 MYSQL의 root패스워드가 ‘11111111’로 변경 되었으므로 일반적인 방법으로 MYSQL을 다음과 같이 실행하였다.
[root@sulinux bin]#/usr/local/mysql/bin/mysqld_safe & [1] 2904 [root@sulinux bin]#090428 23:59:51 mysqld_safe Logging to '/usr/local/mysql/data/sulinux.net.err'. 090428 23:59:51 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
[root@sulinux bin]# |
8 단계 : 패스워드를 사용하여 MYSQL의 root계정으로 접속하여 확인한다.
이제 변경된 MYSQL의 root패스워드(‘11111111’)를 사용하여 MYSQL로 접속하였다. 이로써 MYSQL의 root패스워드가 ‘11111111’로 변경되었음을 확인하였다.
[root@sulinux bin]#/usr/local/mysql/bin/mysql -u root -p mysql Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.32 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> mysql> exit
Bye [root@sulinux bin]# |
이렇게 MYSQL의 root패스워드를 잊어버렸을 경우에는 복구(변경)가 가능하다. 참고로 일반사용자의 MYSQL패스워드를 잊어버렸다면 MYSQL root계정으로 MYSQL에 접속한 다음 update문으로 변경해주면 된다.
관련자료
-
이전
-
다음