[sql] MySQL root 패스워드 초기화 - root 패스워드 분실
서비스 정지
MySQL 서비스를 정지합니다.
sudo service mysql stop
MySQL 서비스가 정지되었는지 확인합니다. 프로세스 목록을 다음 커맨드로 필터링해서 출력했을 때 아무것도 안나와야 합니다.
ps -ef | grep mysqld
다음처럼 프로세스 목록에 mysql
이 출력되면 서비스가 정지한 것이 아니므로 다시 실행해야 합니다.
ubuntu@ubuntu:~$ ps -ef | grep mysqld
mysql 938 1 1 02:19 ? 00:00:55 /usr/sbin/mysqld
안전모드 실행
MySQL을 안전모드로 실행합니다. mysqld_safe는 MySQL을 설치할 때 함께 제공되는 MySQL 서버 시작 스크립트입니다. "--skip-grant-tables" 옵션은 사용자 인증 과정을 생략해서 패스워드 없이 MySQL 로그인이 가능하도sudo록 합니다.
"tables"인 것에 주의해야 하며, 끝에 공백으로 띄워서 "&"를 붙여야 bash 프롬프트가 떨어집니다.
sudo mysqld_safe --skip-grant-tables &
다음과 같은 에러가 발생할 경우, /var/run/mysqld
디렉토리를 생성해야 합니다.
mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
MySQL 설치시에 생성되어야 하는 디렉토리인데 생성되지 않아서 발생하는 에러입니다. 다음 커맨드를 실행해서 디렉토리를 생성한 후 안전모드 실행을 다시 해야 합니다.
sudo mkdir -p /var/run/mysqld
sudo chown mysql:mysql /var/run/mysqld
디렉토리 생성 후에는 프로세스를 확인해서 안전모드로 실행중인 MySQL 프로세스가 있는지 확인해서 있으면 강제로 종료시켜야 합니다.(프로세스 강제 종료는 kill -9 프로세스ID
)
안전모드로 MySQL이 실행되었으면 MySQL 콘솔에 패스워드 없이 로그인합니다.
sudo mysql -u root mysql
mysql>
root 패스워드 변경
다음 쿼리문으로 root@localhost 계정의 패스워드를 새로 설정합니다. "Query OK"가 나오면 변경된 것입니다.
mysql> alter user 'root'@'localhost' identified by '새패스워드';
Query OK, 0 rows affected (0.02 sec)
MySQL 5.7 미만에서는 다음 쿼리문을 실행해서 변경해야 합니다.
mysql> flush privileges;
mysql> set password for 'root'@'localhost' = PASSWORD('새패스워드');
MySQL 콘솔은 "exit" 커맨드로 빠져나갈 수 있습니다.
mysql> exit
MySQL 재시작
MySQL 서비스를 재시작해야 하므로 안전모드를 종료하고 MySQL을 재시작해야 합니다.
sudo service mysql restart
안전모드 서비스가 종료되지 않을 경우 다음 커맨드를 사용해서 MySQL 관련 서비스프로세스들을 모두 강제로 죽인 후 MySQL 서비스를 실행합니다.
sudo killall -KILL mysql mysql_safe mysqld
sudo service mysql start
변경한 패스워드 확인
새 패스워드로 MySQL 콘솔 로그인을 해서 패스워드가 변경되었는지 확인합니다.
mysql -u root -p
Enter password: