Linux&Un*x
--init-file 옵션 사용
- mysqld 를 구동할 수 있는 계정(ex: mysql or root) 으로 login 한다.
- 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