본문 바로가기

문돌이 존버/AWS 스터디

AWS RDS 파라미터 그룹 및 MySQL 클라이언트 연결 해결

반응형

먼저 AWS RDS의 파라미터 그룹을 생성해서 수정하는 작업을 소개하겠습니다. AWS RDS는 일반 서버처럼 명령어로 파라미터를 바로 바꿀 수 없고, AWS Console에서 직접 보며 바꿔야 합니다. RDS 서비스 왼쪽 카테고리를 보면 "파라미터 그룹" 탭이 있습니다.

아래 화면에서 "파라미터 그룹 생성"을 클릭합니다.

파라미터 그룹 패밀리는 본인인 선택한 DB 엔진에 맞춰 골라주시면 됩니다.

이후 생성된 파라미터 그룹에서 "파라미터 편집"을 진행합니다. 편집할 내용은 아래와 같습니다.

1. Time zone
- Asia/Seoul

2. Character Set
- utf8mb4

3. Collation
- utf8mb4_general_ci

"수정" 버튼을 누르면 아래 화면이 나타나는데, 변경하고자 하는 값을 직접 입력해줘야 합니다. AWS UI 문제인지는 몰라도 맨 오른쪽으로 스와이프를 해야 "계속" 버튼이 등장하니 주의깊게 봐주세요^^

마지막으로 collation으로 검색하여 값을 변경해줍니다.

모두 완료했으면 "변경사항 저장"을 클릭하고 완료합니다. 이후 데이터베이스 인스턴스로 돌아가 "수정" 탭을 클릭합니다.

이후 나타나는 화면에서 "DB 파라미터 그룹"을 방금 만들어준 파라미터 그룹으로 변경합니다.

"계속" 버튼을 클릭하면 "수정 사항 요약"에서 수정 사항 적용 시점을 묻는데, 별다른 작업이 없다면 "즉시 적용"을 선택해서 바로 바꾸면 되겠습니다. 이후 데이터베이스 수정 작업이 완료되면 "작업" 탭에서 반드시 "재부팅"을 해주시기 바랍니다.


AWS RDS에 접속하는 방법은 대부분 MySQL Workbench를 이용하는 것 같습니다(MySQL Workbench 활용법은 글 마지막에 소개). 하지만 용량이 조금 큰 csv 파일을 임포트하려 하니 시간이 오래 걸리는 문제가 발생했습니다. 클라이언트를 통해 임포트하면 훨씬 빠르다고 하여 이곳저곳 찾아봤는데 일반적인 서버 접속 방법으로는 AWS RDS에 연결되지 않았습니다.

AWS 공식 문서에도 MySQL 클라이언트를 통한 연결 방법은 나와있습니다.

mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com -P 3306 -u mymasteruser -p

다른 유저를 생성하고, 스키마와 테이블을 만드는 모든 과정을 정상적으로 작동하는데 csv 파일을 임포트하려니 access denied 문제가 발생했습니다. 보안 그룹의 인바운드 규칙을 모두 확인해봐도 문제가 없어서 한참을 삽질했습니다 ㅠ

결국 찾아낸 해결 방법은 RDS 마스터 비밀번호나 데이터베이스 내 유저 비밀번호는 모두 기호를 포함하지 않는 것입니다. 기호를 포함하면 클라이언트로 AWS RDS에 접속하려 할 때 access denied 문제가 발생하는 것 같더군요...

참조
https://forums.aws.amazon.com/thread.jspa?threadID=227013

로컬 파일을 업로드하려면 아래 보이는 "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/" 디렉토리에 파일이 있어야 합니다. 아마 MySQL을 로컬 pc에 설치할 때 디폴트 경로를 선택했다면 위와 같은 디렉토리가 존재할 것입니다.

LOAD DATA LOCAL INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/filename.csv' 
INTO TABLE [테이블명]
FIELDS TERMINATED BY ',' -- csv 파일로 구분자는 콤마(,)
ENCLOSED BY '"' -- 따옴표(")는 무시
LINES TERMINATED BY '\n' -- 줄바꿈 표시가 줄이 끝났다는 뜻
IGNORE 1 ROWS; -- csv 파일 첫 번째 줄은 컬럼명으로 무시

위의 과정에서 계속 마주쳤던 에러(경고)는 크게 2~3가지였습니다. 참고로 csv 파일 데이터가 깔끔하게 임포트되지 않으면 결과에 Warnings 개수가 나옵니다. 이때 show warnings; 를 입력하면 해당 로그를 볼 수 있습니다.

Duplicated entry '1' for key 'tablename.PRIMARY'
-> primary key로 지정된 컬럼에서 중복된 값이 등장했다는 의미(auto_increment는 1부터 시작하므로 주의!)

Row 3553 was truncated; it contained more data than there was input columns
-> 쉼표로 구분하는 csv 파일에서 value 값에 쉼표(,)가 들어가서 기존에 설정한 컬럼보다 더 많은 컬럼을 차지한 것으로 쉼표(,)를 제거하면 해결

리뷰와 같은 길이가 긴 데이터를 저장하려면 컬럼의 데이터 타입을 적절하게 설정해줘야 합니다. 보통 TEXT 타입을 쓰는데, 그중에서도 3가지로 분류됩니다.

데이터 타입 바이트 수(표현 가능한)
TINYTEXT 256 bytes
TEXT 65535 bytes
MEDIUMTEXT 16,777,215 bytes
LONGTEXT 4,294,967,295 bytes

마지막으로 MySQL Workbench를 활용해서 csv 파일을 임포트하는 방법을 소개하겠습니다.

데이터 적재를 원하는 테이블에 커서를 대고 오른쪽 마우스를 클릭한 뒤 "Table Import Wizard"를 선택합니다.

임포트할 csv 파일을 선택합니다.

미리 테이블을 만들었다면 Use existing table을 선택하고, 만들지 않았다면 Create new table을 선택합니다.

이후 다음 화면에서 csv 파일의 컬럼과 DB 테이블의 속성(=컬럼)을 맞춰줍니다. 순서가 같다면 따로 조정할 필요는 없습니다.

이렇게 하고 Next 버튼을 누르면 임포트 과정이 진행될 것입니다. 하지만 위에서도 언급드렸듯이 이를 통한 임포트 속도는 굉장히 느리고, 클라이언트를 통한 임포트가 훨씬 빠르답니다...

참조
https://leveloper.tistory.com/18
https://dev-elena-k.tistory.com/13?category=1174365
https://2dowon.netlify.app/database/mysql---import-csv-file-to-table/
728x90
반응형