구글상단(728X90)




Centos 에서 mysql 5.7 root 권한 재설정시 Access denied 문제해결 또컴퓨터


centos 7.x 에서 mysql 5.7 사용시 root 권한에 문제가 발생해서
권한을 재 설정해야 할 경우가 있습니다. (root 패스워드 변경은 잘됨)

이때 

GRANT ALL PRIVILEGES ON  *.* TO 'root'@'localhost'; 이나 
GRANT ALL PRIVILEGES on *.* to 'root'@'l<호스트>' IDENTIFIED BY '<패스워드>';

혹은
grant all privileges on 사용자DB.* to 'root'@'<호스트>' identified by '<패스워드>' with grant option;

이나 DB 재로딩 명령어 FLUSH PRIVILEGES 으로 권한을 재설정 하려고 하면

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

또는

ERROR 1227 (42000): Access denied; you need (at least one of) the RELOAD privilege(s) for this operation

에러가 출력되며 권한의 재설정이 안되는 경우가 가끔 발생하는데, 주로 PhpMyAdmin 사용시
권한을 잘 못주거나 사용자의 권한을 제한 할때 실수로 root 의 권한을 같이 삭제할 때 이런 경우가 발생합니다.

대부분 해결법은 /usr/bin/mysql_safe --skip-grant-tables 로 접속해서 해결하라고 하지만
CentOS 7.x 버전의 mysql 5.x 버전부터는 mysql_safe 가 제공이 안되는 경우도 있습니다.(버전에 따라 차이)

급한대로 
mysqld --skip-grant-tables --skip-networking & 

명령어를 실행해봐도 mysql 데몬이 실행이안되거나 shutdown 되는데

이때는 /usr/bin/mysql_secure_installation 실행해봐도 마지막 단계 권한 업데이트에서
Access denied 가 출력되며 에러가 납니다.

위와 같은 문제가 발생한 경우 해결책은

1. systemctl stop mysqld 

명령어로 mysql 데몬을 죽이고

2. systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking --user=mysql"

systemctl 명령어로 mysql 데몬 실행시 skip-grant-tables 옵션을 줍니다. 
(CentOS 7.x 이상으로 yum 혹은 rpm 으로 mysql 5.4 이상을 설치한 경우)

※ CentOS 7 이하 버전으로 mysql_safe 명령어가 제공되는 경우나 혹은 서비스 명령어로 직접 mysql 데몬을
   구동시키는 경우는 해당되지 않습니다.


3. /etc/my.cnf 파일에서 

#validate_password_policy=LOW
#validate_password_length=6
(구 버번 DB를 마이그레이션 해서 사용하는 경우 간단한 패스워드가 문제가 되는 경우 해결을 위한 구문임)

구문을 모두 위와 같이 주석처리하고 저장합니다.

4. systemctl start mysqld
(만약 여기서 mysqld 데몬이 정상적으로 구동되지 않는다면 journalctl -xe 로 해당부분 에러를 수정해야 함)

5. mysql -u root -p

GRANT ALL PRIVILEGES ON  *.* TO 'root'@'<호스트>'; 이나 
GRANT ALL PRIVILEGES on *.* to 'root'@'l<호스트>' IDENTIFIED BY '<패스워드>'; 또는
GRANT ALL PRIVILEGES ON  *.* TO 'root'@'<호스트>';

등 상황에 맞는 명령어로 권한 문제 업데이트

※ root 패스워드 재설정은

update user set authentication_string=PASSWORD('암호') where User='root';

혹은
ALTER USER 'root'@'<호스트>' IDENTIFIED WITH mysql_native_password BY '암호';

등으로 상황에 맞는걸로 root 암호 업데이트 및 root 추가

6. FLUSH PRIVILEGES;

DB 업데이트 및 재로딩후 종료

7. systemctl stop mysqld

8. systemctl unset-environment MYSQLD_OPTS

명령어로 mysql 서비스 실행시 skip-grant-tables 및 기타 옵션 제거

9. /etc/my.cnf 파일에서 mysql 실행시 문제가 되었던 구문들 주석해제

10. systemctl start mysqld 

mysql 데몬 정상 실행



P.S : 퍼가는건 문제 없지만 출처 한 줄 정도는 부탁드립니다.

1 2 3 4 5 6 7 8 9 10 다음


구글광고(160X600)