MySQL root password reset 하기
MySQL 관리자 암호를 잃어버려서 root 로 로그인 할 수가 없을때 암호 초기화 하는 방법에 대해서 정리
Linux & Un*x
--init-file 옵션 사용
- mysqld 를 구동할 수 있는 계정(ex: mysql or root) 으로 login 한다.
- MySQL 서버를 중지한다.
Linux
service mysql stop
BASH- Unix
- mysqld 종료 스크립트가 있다면 실행해서 종료한다.
없으면 mysql의 pid 파일을 찾은후에 kill (kill -9 로 종료하면 안 됨!. - 참고 자료) 종료한다. (kill 뒤에 옵션을 안 주면 TERMinate signal 이 전송된다)
kill `cat /var/lib/mysql/host_name.pid`
CODE
에디터에서 루트 암호를 초기화하는 SQL 파일을 만들고 /var/lib/mysql/mysql-pwd-init.sql 으로 저장한다.
MySQL 5.7 이상
UPDATE mysql.user set authentication_string=PASSWORD("MyNewPass"), password_expired='N', plugin='mysql_native_password' where User='root'; flush privileges;
SQL5.7 부터는 auth plugin 이 도입되어 auth_socket 일 경우 암호를 설정해서 로그인에 실패함
MySQL 5.7 미만
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;
SQLmysqld 를 --init-file 옵션과 함께 구동한다.
a. Linux
SELinux note
SELinux 를 사용할 경우 --init-file에 지정한 초기화 파일은 SELinux rule 에 어긋나면 mysql 프로세스가 못 읽을수 있다..
mysql 이 읽으려면 mysqld_etc_t 레이블이 부여되야 하므로 다음 명령어로 SELinux context 를 지정해 줘야 한다.
chcon -t mysqld_etc_t /var/lib/mysql/mysql-pwd-init.sql
보안 컨텍스트 확인
$ semanage fcontext -l |grep mysqld_etc_t
/etc/my\.cnf regular file system_u:object_r:mysqld_etc_t:s0
/etc/mysql(/.*)? all files system_u:object_r:mysqld_etc_t:s0mysqld_safe --init-file=/var/lib/mysql/mysql-pwd-init.sql
BASHb. Unix
mysqld_safe --init-file=/var/lib/mysql/mysql-pwd-init.sql &
BASH- 잘 반영되었는지 확인하기 위해 mysql cient 로 login 해 보고 제대로 로그인 되면 /var/lib/mysql/mysql-pwd-init.sql 는 삭제한다.
mysql 서비스를 재구동한다.
service mysqld restart
CODE
--skip-grant-tables 사용
privilege 를 확인하지 않는 옵션인 --skip-grant-tables 옵션을 통해 mysql 구동한후 암호를 변경한다.
에러 처리
아래와 같은 에러가 날 경우 my.cnf 에 user = mysql 을 설정한다.
- mysql 구동
Linux
service mysql start --skip-grant-tables
CODEUnix
mysqld_safe --skip-grant-tables
CODE
- mysql 콘솔로 연결한다.
mysql -u root mysql
CODE "--init-file 옵션 사용" 항목의 3번 루트 암호를 초기화하는 SQL을 수행한다.
mysql 재구동
service mysql restart
CODE
Windows
- 시작 -> cmd 에서 services.msc 입력하거나 제어판 -> 관리도구 -> 서비스
- MySQL server 중지
에디터에 Case1항의 3번 암호를 초기화하는 SQL 을 입력하고 c:\init.sql 로 저장
시작 -> 실행에서 다음 명령어 입력 (MySQL 설치경로 따라 다를수 있음)
"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.5\\my.ini" --init-file=c:\\init.sql
CODE- 잘 반영되었는지 확인하기 위해 mysql cient 로 login 해 보고 제대로 로그인 되면 c:\init.sql는 삭제한다.