더북(TheBook)
Q MySQL root 패스워드를 잊어버렸습니다.

A 곤란하네요. 패스워드 잊지 않도록 노력해주시기 바랍니다.

먼저 mysql 데몬을 정지합니다.

administrator@server01:~$ sudo service mysql stop
mysql stop/waiting

다시 mysql 데몬을 실행하는데 --skip-grant 옵션을 추가해서 인증 과정을 건너뜁니다.

administrator@server01:~$ sudo mysqld_safe --skip-grant &

mysql에 접속하면 사용자 인증 없이 MySQL 모니터에 바로 접속 가능합니다.

administrator@serer01:~$ mysql
...
mysql>

데이터베이스 목록 중에서 기본 데이터베이스 mysql에는 사용자 권한, 데이터베이스에 대한 권한이 저장되어 있습니다. 이 내용을 수정해야 합니다. mysql 데이터베이스에 접근합니다.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.03 sec)

mysql> USE mysql;
mysql 데이터베이스에 root 사용자의 패스워드를 변경하는 쿼리를 입력합니다. 쿼리 구문이 다소 복잡한데 ‘root'에 해당하는(WHERE user='root') ‘password’ 값을 새로운 패스워드로 변경(SET password=password('[새로운 패스워드]') )하여 USER 테이블을 갱신(UPDATE user)합니다.
mysql> UPDATE user SET password=password('******') WHERE user='root';

변경된 사용자 권한을 적용하기 위해 'FLUSH PRIVILEGES' 쿼리를 입력합니다.

mysql> FLUSH PRIVILEGES;

MySQL 모니터를 종료하고 명령 프롬프트로 돌아옵니다.

mysql> exit

--skip-grant 옵션을 적용한 mysql 데몬이 실행 중이므로 이를 중지시켜야 합니다.

administrator@server01:~$ ps -ef | grep mysql
root      2076 1131  0 01:42 pts/0     00:00:00 sudo mysqld_safe --skip-grant
root      2077 2076  0 01:42 pts/0     00:00:00 /bin/sh /usr/bin/mysqld_safe --skip-grant
mysql     2437 2077  1 01:42 pts/0     00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
administrator@server01:~$ sudo kill -9 2076
administrator@server01:~$ sudo kill -9 2077
administrator@server01:~$ sudo kill -9 2437

kill 명령으로 각 프로세스를 하나씩 중지시키는 방법도 있지만 다음과 같이 mysql과 관련된 모든 프로세스를 한 번에 중지시키는 스크립트를 사용하면 편리합니다. mysql과 관련된 프로세스 목록 중 둘째 열(프로세스 ID) 정보를 추출하여 kill 명령의 인자로 넘겨 프로세스를 중지시킵니다. 이때 인자로 넘기는 명령은 역따옴표(`)를 이용해서 처리해야 하므로 주의합니다. 명령을 실행한 다음 ps 명령으로 다시 조회해봅시다.

administrator@server01:~$ sudo kill -9 `ps -ef | grep mysql | awk '{print $2}'`
administrator@server01:~$ ps -ef | grep mysql
1000 2956 1131 0 01:52 pts/0 00:00:00 grep --color=auto mysql

mysql 서버를 재시작하고 테스트합니다. root 사용자의 변경된 패스워드를 입력해서 MySQL 터미널에 접속 가능한지 확인합니다.

administrator@server01:~$ sudo service mysql start
administrator@server01:~$ mysql -u root -p
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.