Bitnami mysql 운영 도중 password 에러가 발생 시

강준혁·2023년 2월 27일
0

K8S 혹은 가상 환경의 서버에서 mysql 을 손쉽게 운영하고 싶을 때 bitnami를 많이 사용합니다.

K8S 환경의 bitnami mysql 운영 도중 발생한 이슈에 대해 해결 하는 방법에 대해 서술합니다.

(Helm chart 기준)

Access denied

error: 'Access denied for user 'root'@'localhost' (using password: YES)'

운영 도중 혹은 재시작 도중 mysql 을 생성 시 해당 에러가 뜨며 서비스가 정상적으로 동직하지 않는 경우가 발생했습니다.

(root password 를 그 누구도 변경하지 않았을 뿐더러 k8s의 'Secret' 이나 'Configmap' 에도 해당 password 가 변경된 이력이 전혀 없었다)

원인은 나중에 찾고 우선 해결부터 진행했습니다.


  1. skip grant tables 설정으로 root password 를 무시하고 서비스가 실행되도록 한다
primary:
  configuration: |-
    [mysqld]
    skip-grant-tables
    ...

Helm chart의 values에서 추가합니다


  1. Mysql Container의 bash shell로 attach 한다
kubectl exec -it pods/bitnami/mysql bash -n mysql

예시로 위와 같이 mysql 이 실행되고 있는 pod 에 들어갑니다


I have no name!@mysql:/$ mysql

mysql client를 바로 실행한다 grant 모드여서 바로 접근이 가능합니다


mysql> FLUSH PRIVILEGES;

grant 모드의 테이블 권한을 사용할 수 있도록 서버에 리로드 명령어를 날립니다


mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'mypassword';
or
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mypassword';

root password를 기존에 설정해두었던 비밀번호로 다시 변경합니다


primary:
  configuration: |-
    [mysqld]
    #skip-grant-tables
    ...

mysqld 옵션에서 'skip-grant-tables'을 제거하고 다시 시작 후 정상 동작을 확인합니다




혹여나 이러한 설정으로 문제 해결이 안될 시 다음과 같은 상황을 확인이 필요합니다.

  1. secret 은 변경사항을 sync 하지 않고 pod와 configmap만 sync 해본다.
  2. root 계정의 접근 dns localhost 가 pod 내의 dns에 등록되어 접근 가능한지 확인 한다.
  3. password를 설정하는 파일의 액세스 권한을 확인한다.




발생 원인은 정확히 찾지 못하였으나 재시작 시 root password 가 변경되는 것으로 보입니다

우선 db가 재시작되는게 치명적일 수 있으니 readniess와 liveness probe를 disabled해서 어느정도 막았으나 정말 문제가 생겼을 때 대처가 될지는 확인이 필요합니다

감사합니다.

0개의 댓글