TIL#170 RDS charset 문제해결

Dasom·2023년 7월 26일
0

linux

목록 보기
7/7

기존 서버 환경: Elastic Beanstalk + RDS(MariaDB)
바꾸려는 서버 환경: EC2 + RDS(MariaDB)
개발 서버 환경: EC2 + EC2 내부 DB(MariaDB)

기존의 서버환경에서는 빈스톡이 rds를 생성해주고 연결해주었기 때문에 간단하게 생성할 수 있었다. 서버 환경을 변경하게 되면서 ec2와 rds를 각자 생성해주고 연결하게 되었다.
ec2 환경 안에서만 데이터베이스에 접속할 수 있게 하기 위해 퍼블릭 액세스 가능은 "아니요"로 설정한다.

  • ec2 리눅스 환경에서 데이터베이스(mariaDB)에 접속하는 명령어
    $ mysql -u root -p -h <rds 엔드포인트 주소>

  • 장고 shell에서 유저 생성을 하려고 하니 한글이 데이터베이스 인코딩과 맞지 않아서 에러 생성

  • rds charset 설정 문제이기 때문에 설정 변경

  • rds 파라미터 그룹 생성

    • character_set_client -> utfmb4
    • character_set_connection -> utfmb4
    • character_set_database -> utfmb4
    • character_set_filesystem -> utfmb4
    • character_set_results -> utfmb4
    • character_set_server -> utfmb4
    • collation_connection -> utfmb4_general_ci
    • collation_server -> utfmb4_general_ci
  • rds db 인스턴스와 파라미터 그룹 연결

  • 반드시 재부팅!!

  • 파라미터 적용 전 rds mariadb 설정 상태

    스키마 설정 상태 볼 수 있는 명령어
    $ SELECT * FROM information_schema.SCHEMATA;


빨간색으로 지운 부분 외에는 mariadb rds를 생성할때 자동으로 만들어지는 기본 스키마들이다.
innodb 와 mysql 스키마의 charset 설정이 utf8mb4가 아니라서 create database <database name> 으로 데이터베이스 생성을 하면 latin1 로 생성이 되는 문제가 있었다. 로컬에서는 해당 명령어만으로도 utf8mb4로 생성이 되었기 때문에 로컬 mariadb 와 비교를 해보았다.

로컬 db를 봤을 때는 create database <database name> 명령어를 칠 때 mysql 스키마의 설정을 따라 만들어지는 것으로 추측을 했었다.
하지만 rds에서 파라미터 그룹을 적용하고 나니 mysql 스키마가 아닌 innodb 스키마의 설정이 utf8mb4로 바뀌었고 create database <database name> 명령어를 치니 utf8mb4로 설정된 데이터베이스가 생성되었다.
로컬에는 innodb가 없어서 추측했던 대로 mysql 스키마의 설정대로 되는 것이 맞는 것 같고, rds 는 innodb 스토리지 엔진을 기본으로 하기 때문에 innodb 스키마가 있고 innodb 스키마의 설정을 기반으로 생성되는 것 같다.
(혹시 제가 틀렸거나 잘 알고 계시는 분은 댓글 부탁해요😄)

profile
개발자꿈나무🌲

2개의 댓글

comment-user-thumbnail
2023년 7월 26일

잘 봤습니다. 좋은 글 감사합니다.

1개의 답글