본문 바로가기
SW 프로그래밍/Mariadb

MySQL root password reset 하기(Centos)

by N2info 2019. 6. 17.

Linux&Un*x

--init-file 옵션 사용

  1. mysqld 를 구동할 수 있는 계정(ex:  mysql or root) 으로 login 한다.
  2. MySQL 서버를 중지한다.
service mysql stop

 

에디터에서 루트 암호를 초기화하는 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

5.7 부터는 auth plugin 이 도입되어 auth_socket 일 경우 암호를 설정해서 로그인에 실패함

 

MySQL 5.7 미만

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:s0
mysqld_safe --init-file=/var/lib/mysql/mysql-pwd-init.sql

잘 반영되었는지 확인하기 위해 mysql cient 로  login 해 보고 제대로 로그인 되면

/var/lib/mysql/mysql-pwd-init.sql  는 삭제한다.

rm /var/lib/mysql/mysql-pwd-init.sql

mysql 서비스를 재구동한다.

service mysqld restart

참고 : https://www.lesstif.com/pages/viewpage.action?pageId=9437268