Last Updated on 1월 3, 2024 by Jade(정현호)
안녕하세요
이번 포스팅에서는 MySQL 8.0 버전과 호환되는 Amazon Aurora MySQL 3 버전 출시와 관련된 내용에 대해서 확인해 보겠습니다.
Contents
Amazon Aurora는 MySQL 8.0을 지원
2021년 11월 18일 Amazon AWS의 Whats-new 를 통해서 MySQL 8.0을 지원하는 새로운 Aurora 3 버전이 나왔음을 알렸습니다.
이전까지는 MySQL 5.7 버전과 호환되는 AWS Aurora 2.x 버전대를 지원하였습니다.
이번에 MySQL 8.0 과 호환되는 AWS Aurora 3 버전이 출시되게 되었습니다
Amazon 은 아래와 같은 MySQL 8.0의 기능적 장점을 사용할 수 있음을 소개하고 있습니다.
MySQL 8.0에는 테이블과 관련 인덱스를 생성하고 로드 하는 전체 프로세스의 속도를 높이는 인스턴트 DDL과 다른 트랜잭션이 행 잠금을 해제할 때까지 기다리지 않도록 하는 SKIP LOCKED 및 NOWAIT 옵션과 같은 향상된 성능 기능이 포함되어 있습니다.
MySQL 8.0은 쿼리 문제를 보다 쉽게 해결할 수 있는 창 기능과 명명된 임시 결과 집합을 사용할 수 있도록 공통 테이블 표현식과 같은 개발자 생산성 기능을 추가합니다. 또한 JSON 기능 추가, 새로운 보안 기능 등이 포함됩니다.
Aurora MySQL-Compatible Edition 의 MySQL 8.0은 글로벌 데이터베이스, RDS 프록시, 성능 개선 도우미 및 병렬 쿼리를 포함하여 널리 사용되는 Aurora 기능을 지원합니다.
MySQL 호환 대상 버전
이번 AWS Aurora 3 버전의 경우 MySQL 8.0.23 호환으로 출시되었습니다.
지금 보편적으로 사용하는 Aurora MySQL 2.x 버전은 5.7.12 버전과 호환되어 있습니다.
MySQL 8.0.23 과 호환되기 때문에 8.0.23까지 수정이 된 내용이나 추가된 기능 등을 사용할 수 있게 됩니다.
[내용 업데이트] Aurora MySQL 3.03.0 버전에서는 호환 MySQL 버전이 8.0.23 -> 8.0.26 으로 변경되었습니다.
AWS Aurora 3 버전의 특징
Amazon Aurora MySQL 은 MySQL 5.6 및 MySQL 5.7과 호환되며 이제는 MySQL 8.0과도 호환됩니다. 2021년 11월 18일 Amazon은 MySQL 8.0과 호환되는 Aurora MySQL 3을 정식 출시하였습니다.
Aurora MySQL 3에는 CTE(공통 테이블 표현식) 지원, 역할 기반 인증, 복제 향상, 창 기능, 인스턴트 DDL 등을 비롯한 몇 가지 새로운 기능이 도입되었다고 하며, Aurora MySQL 3은 MySQL 8.0.23 Community Edition과의 호환성을 제공하며 Aurora가 지원되는 모든 AWS 리전 에서 사용할 수 있다고 밝혔습니다.
MySQL Community Edition 마이너 버전과의 긴밀한 호환성
AWS 블로그에서 밝힌 MySQL Community Edition 릴리스에서 버전 유지 관리에 대해 어떻게 다르게 생각하는지 살펴보겠습니다.
마이너 버전 호환성 관점에서 모든 Aurora MySQL 1 엔진 버전은 MySQL 5.6.10a Community Edition 과 호환되며 모든 Aurora MySQL 2 엔진 버전은 MySQL 5.7.12 Community Edition과 호환되어 서비스되었습니다.
Aurora MySQL과 호환되는 새로운 기능을 출시할 때 별도의 Aurora 버전을 유지 관리하고 MySQL Community Edition의 기능 및 기타 수정 사항을 Aurora 마이너 버전으로 가져오게 됩니다.
Aurora MySQL 3 부터 MySQL Community Edition 릴리스를 더 밀접하게 따르도록 이 릴리스 전략을 변경할 것이고, 각 Aurora MySQL 3 릴리스는 해당 MySQL 8.0 Community Edition 릴리스에 매핑 됩니다.
예를 들어, Aurora MySQL 3.01은 MySQL 8.0.23에 매핑 되며 특정 Community Edition 마이너 버전과 유선 호환되며, 특정 마이너 버전에 추가된 모든 수정 사항과 코드 변경 사항이 포함된다고 밝혔습니다.
Aurora MySQL 3 마이너 버전은 Aurora 관련 수정 사항 및 기능을 계속 추가할 뿐만 아니라 모든 커뮤니티 버그 수정 및 기능이 지속적으로 통합되도록 MySQL 8.0 Community Edition 과의 최신 버전을 유지하는 정책으로 진행될 예정이라고 합니다.
포스팅을 업데이트 하는 시점에 최신 Aurora MySQL 3 버전은 3.02.0 버전이고, 현재는 3개 마이너 버전을 선택할 수 있습니다.
Aurora MySQL 3 버전의 버전 업데이트 정보는 아래 링크에서 확인하실 수 있습니다.
참고로 Aurora MySQL 2 버전에 대한 정보는 아래 링크를 참조하시면 됩니다.
Aurora MySQL 3에 도입된 주요 새 기능
Aurora MySQL 3에서는 많은 새로운 MySQL 8.0 기능을 사용할 수 있으며 사용자 가이드에서 전체 목록을 찾을 수 있습니다. 이 섹션에서는 많은 Aurora 고객이 요청한 일부 기능에 대해서 소개하도록 하겠습니다.
바이너리 로그 개선(Binary log improvements)
• 다중 스레드 복제 – Aurora MySQL 3는 다중 스레드 복제(MTR)를 지원합니다.
• 복제 필터링 – Aurora MySQL 3에서는 바이너리 로그 복제 필터링도 지원합니다.
• 바이너리 로그 트랜잭션 압축 – Aurora MySQL 3에서 바이너리 로그 트랜잭션 압축을 활성화하고 사용할 수 있습니다.
인스턴트 DDL(Instant DDL)
Aurora MySQL 3는 인스턴트 DDL을 지원합니다. ALTER TABLE 문의 ALGORITHM=INSTANT 절을 사용하여 인스턴트 DDL 기능을 활용할 수 있습니다.
이 기능 은 열 추가, 열 기본값 설정 또는 삭제, 테이블 이름 바꾸기 등과 같은 지원되는 스키마 변경 속도를 크게 높 입니다.
Common table expressions
CTE는 명령문의 범위 내에서 호출할 수 있는 이름으로 임시 결과 집합을 사용하는 방법을 제공합니다.
더 깔끔하고 읽기 쉬운 SQL 쿼리를 작성할 수 있습니다. CTE는 또한 하위 쿼리를 여러 번 작성하고 여러 번 평가해야 하는 것을 방지함으로써 성능 향상을 제공할 수 있습니다. CTE는 WITH 절을 통해 구현됩니다.
Window functions
Window functions 을 사용하여 분석 쿼리를 개선할 수 있습니다.
Aurora MySQL 3 이전 보다 많은 window functions 인 RANK(), DENSE_RANK(), NTILE(), ROW_NUMBER() 지원하며, 더 많은 정보는 문서를 참조하시면 됩니다.
Improved parallel query support
병렬 쿼리는 쿼리 처리를 Aurora의 특수 구축된 분산 스토리지 계층으로 분산 및 병렬화 하여 특정 유형의 쿼리 성능을 향상시킬 수 있는 Aurora MySQL 전용 기능입니다.
새로운 인덱스 유형(New index types)
이제 Aurora MySQL 3에서 내림차순 및 보이지 않는 인덱스 유형(invisible index type)을 지원합니다. 내림차순 인덱스는 인덱스를 내림차순으로 정렬하고 검색해야 하는 쿼리의 성능을 향상시킵니다
Hash Join 기본 활성화
Aurora MySQL 3에서는 Hash Join 사용이 기본값으로 되었습니다. 그래서 optimizer_switch 의 값에서 block_nested_loop=on 이 기본값으로 되어 있습니다.
Aurora MySQL 2 버전 까지는 optimizer_switch='hash_join=off' 이 기본값이었습니다.
보다 자세한 사항은 아래 AWS Blog를 참조하시면 됩니다.
innodb_flush_log_at_trx_commit
Aurora MySQL 2 버전과 3버전의 여러 차이점 중에서 innodb_flush_log_at_trx_commit 파라미터의 변화가 있습니다.
Aurora MySQL 2 버전은 innodb_flush_log_at_trx_commit 파라미터 변경이 가능합니다.
[Aurora MySQL 2 버전의 파라미터 그룹]
Aurora MySQL 3 버전부터는 변경이 불가합니다. [아래에 변경 사항 업데이트 있음]따라서 기존에 innodb_flush_log_at_trx_commit 파라미터 값을 수정하여 사용하였을 경우 3버전으로 업그레이드시 이 부분에 대해서 체크 및 고려가 필요 할 것으로 예상됩니다.
[Aurora MySQL 3 버전의 파라미터 그룹]
[업데이트] Aurora MySQL3 버전이 출시되었을 때는 innodb_flush_log_at_trx_commit 파라미터가 변경이 불가능 하였으나 최신 확인 사항으로 이제는 Aurora MySQL 3 버전에서도 innodb_flush_log_at_trx_commit 파라미터의 변경이 가능 해졌습니다.
MySQL Community Edition과 Aurora MySQL 모두에서 데이터 손실이 발생할 수 있지만 아키텍처가 다르기 때문에 각 데이터베이스의 동작이 다릅니다.
이러한 아키텍처 차이로 인해 데이터 손실 정도가 달라질 수 있습니다. 데이터베이스가 ACID를 준수하는지 확인하려면 항상 innodb_flush_log_at_trx_commit를 1로 설정해서 사용해야 합니다.
Aurora MySQL 버전 3에서는 innodb_flush_log_at_trx_commit을 1이 아닌 값으로 변경하기 전에 먼저 innodb_trx_commit_allow_data_loss 값을 1로 변경해야 합니다.
이렇게 innodb_trx_commit_allow_data_loss을 1로 변경한다는 것은 사용자가 데이터 손실 위험을 인지하고 인정함을 의미합니다.
innodb_flush_log_at_trx_commit 와 innodb_trx_commit_allow_data_loss 파라미터 모두 cluster 파라미터 그룹에서 수정 가능합니다.
innodb_trx_commit_allow_data_loss 값을 1로 먼저 변경해서 적용 후에 innodb_flush_log_at_trx_commit 파라미터 값을 변경하시면 됩니다.
lower_case_table_names
Aurora MySQL 3 버전은 MySQL 8 버전 호환 데이터베이스인 만큼 MySQL8 버전의 고유한 기능과 특성, 특징이 많이 그대로 적용되게 됩니다.
그에 따라서 MySQL 8 버전과 동일하게 테이블 이름의 대소문자 사용 여부를 결정하는 lower_case_table_names 시스템 변수에 대해서는 MySQL8 버전 그리고 RDS for MySQL 8 버전과 마찬가지로 인스턴스 생성시에만 결정할 수 있으며, 생성 후에는 변경이 불가능 합니다.
그러므로 운영 정책에 따라서 lower_case_table_names 를 미리 설정을 해야 함을 고려해야 합니다.
Aurora MySQL 3 에서도 lower_case_table_names 의 기본값은 0 이며, 대소문자를 구분하지 않고 사용하기 위해서는 1로 변경해서 사용해야 합니다.
변경해서 사용하기 위해서는 Aurora MySQL 3 버전을 생성하기 전에 사용할 파라미터 그룹에서 먼저 설정이 되어 있어야 합니다.
파라미터 그룹을 별도로 생성하기 위해서는 아래와 같이 RDS 메뉴 -> 파라미터 그룹 으로 이동 후에 "파라미터 그룹 생성" 을 클릭합니다.
파라미터 생성시 파라미터 그룹 패밀리는 aurora-mysql8.0 으로 하고 Type(타입) 은 DB Cluster Parameter Group 으로 설정 후에 파라미터 그룹 이름을 지정 합니다. (아래 이미지의 파라미터 명은 예시입니다)
lower_case_table_names 시스템 변수는 Aurora MySQL 의 Cluster Parameter Group 에서만 지정 가능하며, DB Parameter Group 에서는 설정 항목이 존재하지 않습니다.
위에서 생성한 파라미터를 선택 후에 파라미터 검색 항목에서 lower_case_table_names 를 입력하여 검색 후에 "파라미터 편집(Edit parameters)" 을 클릭합니다. (기본 값은 아래 와 같이 0 으로 되어 있습니다)
파라미터의 값을 1로 변경 후에 오른쪽 상단의 변경사항 저장(Save change) 를 클릭합니다.
Aurora MySQL 클러스터 생성시 "Additional configuration" 항목에서 이전단계에서 별도로 생성한 파라미터 그룹을 선택해야 합니다(중요)
이 단계에서 lower_case_table_names 시스템 변수를 변경한 파라미터 그룹을 선택하지 않고 생성하였다면, MySQL 8이나 Aurora MySQL 3 버전에서는 생성 이후 변경이 불가능 합니다
클러스터 생성된 후 파라미터를 조회해보면 아래와 같이 변경된 내역을 확인할 수 있습니다.
mysql> show variables like '%case%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | OFF | | lower_case_table_names | 1 | +------------------------+-------+
Reference
Reference Link
• aws/amazon-aurora-mysql-8-0
• aws/aurora-mysql-3-with-mysql-8-0
연관된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io