IT/AWS

[AWS] RDS mariaDB 인스턴스 복사 후 이상 증상 해결 방법 (INSERT 문제)

월공 2023. 6. 13. 23:40
728x90
300x250

RDS 인스턴스 복사후 이상증상은 아주 여러가지가 있을 수 있지만 내 경우엔 INSERT 가 제대로 되지않는 문제가 있었다.
결국 RDS 파라미터 그룹 문제였다.
왜 이런일이 발생하였는지 , 원인 및 분석한 부분을 쭉 포스팅 하려고한다.


현재 내가 관리하는 AWS RDS 에 두개의 DB 인스턴스가 가동중에 있다.

1. 실 DB
2. 테스트 DB

실DB랑 테스트 DB랑 서로 데이터 갭 차이가 너무 많이나서 동기화를 하고자하였다.
1 번의 스냅샷을 2번으로 덮어씌우고싶었으나 , 덮어씌우는 방법은 안되는듯하고
1번의 스냅샷을 테스트 DB_1 라고 인스턴스 명을 겹치지않게 조정하여 진행하였고
기존에 있던 2 번을 테스트 DB_2 로 바꾸고, 방금 만들어진 테스트 DB_1 를 다시 테스트 DB 로 바꿔서 굳이 개발환경에
DB 호스트를 바꾸지않아도 되게끔 하였다 (이렇게 해도 되는건진 모르겠음 .. 일단 문제는 없더라)

문제는 복사하고나서, 발생하였다
DB 연결에는 이상이 없었으나 INSERT 가 제대로 되지않는 문제가 발생
아래와 같은 에러를 계속 내뱉었다.

doesn't have a default value

당연히 스냅샷을 그대로 복원한거라 그대로 복사될거라 생각했는데 순간 당황하였다.
해당 에러를 살펴보니 값이 없다는뜻이어서 빈값으로라도 넣어줘야하나 하고 생각했는데 순간 이상하다는 생각이 들었다.
실DB 에서는 NULL 허용이 되지않는 컬럼에 값이 없다고 튕기지 않는데 복사한 테스트DB 에서는 에러를 내뱉는게 이해가 가지않았다.

DB 설정이 다르구나 ! 라고 생각이 들었고 검색 해본 결과 NULL 허용이 되지않는 컬럼이 있어도 값이 없으면 공백으로 들어가게 해주는 옵션이 있다는걸 알게됐다
바로 'sql_mode' 라는 녀석

아래 명령어로 확인이 가능하다.

SELECT @@sql_mode;
#복제한 db 옵션
sql_mode : NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

#실서버 db 옵션
sql_mode : STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


위 처럼 달랐고, 테스트 DB 에서도 sql_mode 를 변경하고자 root 계정으로 들어가서 설정을 바꿔보려고 온갖 생쇼를 했는데 이게 잘 안됐다.
SUPER 권한이 없어서 안된다더니, SUPER 권한을 가져올라해도 권한이 없다고 안됐다.
아니 root 한테 권한이 없으면 누구한테 있어 ..? 라는 생각을 했는데 

생각해보니 AWS RDS 라는것을 다시금 깨달았고, LightSail에서의 방화벽 설정을 aws 웹사이트에서 하듯이
RDS 의 설정도 aws 웹에서 조정하는거 아닐까 하고 찾아봤더니 역시나 ... 

Amazon RDS - 파라미터 그룹 에서 편집이 가능하다는것을 알게되었고,


애초에 스냅샷을 복원하고나서 인스턴스 수정창에 진입하여 'DB 파라미터 그룹'  을 실DB가 쓰고있는 그룹으로 조정해줬으면 진즉에 깔끔하게 끝났을 일이었다.

 

역시 무식하면 손발이 고생한다.

여튼 이렇게 파라미터 그룹을 조정해주고나서  DB 인스턴스 재부팅은 필수,

재부팅하고나서 정상적으로 값이 INSERT 되는것을 확인 할 수 있었다.

약간의 삽질로 인하여 AWS 에 대해서 또 하나 알아가는 날이었다..

728x90
300x250