Last Updated on 2월 26, 2024 by Jade(정현호)
안녕하세요
이번 포스팅에서는 Amazon RDS for MySQL 8.0 버전에서 버전 별 변경 사항 2가지에 대해서 확인해보려고 합니다.
lower_case_table_names
Aamazon RDS for MySQL 에서는 8.0.19 이상 버전부터 1 (이름은 소문자로 저장되며 비교 시 대소문자 구분 안 함) 으로 설정이 지원됩니다.
기본값은 0(대소문자를 구분) 입니다.
아래 링크에서 Amazon RDS DB 인스턴스에 대한 MySQL 파라미터 예외에서 lower_case_table_names 항목을 참조하시면 됩니다
MySQL 5.6이나 5.7과는 달리 MySQL 8.0 버전에서는 인스턴스 생성후에는 lower_case_table_names 값을 변경할 수 없습니다
(만약 변경해서 MySQL 시작하면 인스턴스 기동이 안됨)
그래서 lower_case_table_names 기본값인 0으로 인스턴스 생성 하였다면 MySQL 8.0 에서 lower_case_table_names=1 로 변경하기 위해서는 인스턴스를 재생성 해야 합니다.
Amazon RDS for MySQL 8.0 도 동일하게 인스턴스 생성 후에는 lower_case_table_names 를 변경할 수 없으며, 생성 시에 lower_case_table_names 을 1로 설정하고 인스턴스를 생성하면 사용할 수는 있습니다.
(Aamazon RDS for MySQL 에서는 8.0.19 버전 이상 부터 가능)
Aurora MySQL 3 버전도 MySQL 8 버전과 호환을 가지는 RDS 서비스임으로 lower_case_table_names=1 으로 사용하기 위해서는 아래와 동일 하게 사전에 파라미터 그룹 생성 등을 진행해야 합니다.(Aurora MySQL 3 버전과 관련된 내용은 아래 포스팅 참조)
파라미터 그룹
RDS 를 생성하기 전에 파라미터 그룹을 설정이 필요 하기 때문에 파라미터 그룹을 새로 생성 후 파라미터를 변경하도록 하겠습니다.
RDS 에서 파라미터 그룹 -> 파라미터 그룹 생성 으로 이동합니다.
파라미터 그룹을 생성 항목에서 파라미터 그룹 패밀리는 "mysql8.0" 으로 선택하고 그룹 이름은 자유롭게 입력 후 하단의 "생성" 버튼을 클릭합니다.
파라미터 검색 항목에서 lower_case_table_names 를 입력하여 검색 후에 "파라미터 편집" 을 클릭합니다.
값을 1 로 입력 후에 상단에 "변경 사항 저장" 을 클릭합니다.
RDS 생성
RDS 에서 데이터베이스 생성을 클릭하여 DB 생성을 진행을 시작합니다.
생성 메뉴에서 먼저 버전을 선택을 해야 하며 lower_case_table_names=1 를 사용하기 위해서 8.0.19 버전 이상으로 선택하면 됩니다.
중간에 "추가 구성" 항목에서 "DB 파라미터 그룹" 에서 이전 단계에서 생성한 파라미터 그룹을 선택하면 됩니다.
생성 이 완료되었다면 몇 가지를 통해 테스트를 해보도록 하겠습니다.
mysql> select @@version; +-----------+ | @@version | +-----------+ | 8.0.25 | +-----------+ mysql> show variables like '%lower_case%'; +------------------------+-------+ | Variable_name | Value | +------------------------+-------+ | lower_case_file_system | OFF | | lower_case_table_names | 1 | +------------------------+-------+
이전의 파라미터 그룹을 수정한 내용 처럼 lower_case_table_names = 1 이 설정된 것을 확인할 수 있습니다.
그 다음은 테이블을 생성해보도록 하겠습니다.
mysql> create table Tb_TEst_1NnM(col1 int); mysql> create table tB_teST_2NnM(col1 int); mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | tb_test_1nnm | | tb_test_2nnm | +----------------+
이와 같이 대소문자를 구분하지 않게(소문자로) 생성되는 것을 확인할 수 있습니다.
그래서 Amazon RDS for MySQL 8.0 에서도 lower_case_table_names =1 을 사용하기 위해서는 이렇게 먼저 파라미터 그룹을 생성 및 파라미터를 수정하여 인스턴스를 생성하시면 됩니다
RDS for MySQL using GTID-based
Amazon RDS for MySQL 8.0 에서는 GTID 기반 복제 설정이 지원되지 않았으며 최근 버전인 8.0.26 버전에서 부터 지원하기 시작하였습니다.
추가로 MySQL 5.7 버전대에서는 5.7.23 부터 GTID 기반 복제기능을 사용할 수 있습니다.
8.0.26 버전과 그 이하 버전의 차이를 확인해보기 위해서 인스턴스를 생성하여 확인해보도록 하겠습니다
(생성 작업 프로세스는 생략)
먼저 파라미터를 변경하기 위해서는 별도로 파라미터 그룹을 생성하고 파라미터를 변경하면 됩니다.
enforce_gtid_consistency 와 gtid_mode 는 ON 으로 설정 후 "변경 사항 저장" 을 클릭합니다
8.0.26 이하 버전에서도 gtid 관련 파라미터는 설정은 가능 하며, 읽기 전용 복제본(Replica or Slave 인스턴스) 도 생성은 가능 합니다.
• 8.0.25 버전에서 파라미터 확인
mysql> select @@version; +-----------+ | @@version | +-----------+ | 8.0.25 | +-----------+ mysql> show variables like '%gtid%'; +----------------------------------+--------------------------------------------+ | Variable_name | Value | +----------------------------------+--------------------------------------------+ | binlog_gtid_simple_recovery | ON | | enforce_gtid_consistency | ON | | gtid_executed | b6b15f85-687b-11ec-83ff-0ab03cadc1ac:1-499 | | gtid_executed_compression_period | 0 | | gtid_mode | ON | | gtid_next | AUTOMATIC | | gtid_owned | | | gtid_purged | b6b15f85-687b-11ec-83ff-0ab03cadc1ac:1-491 | | session_track_gtids | OFF | +----------------------------------+--------------------------------------------+
그리고 8.0.25 의 Replica 인스턴스에서 복제 상태를 확인 및 마스터 인스턴스에서 데이터 입력, 변경 등을 진행해보면 복제는 정상적으로 수행은 되고 있는 것을 확인할 수 있습니다
mysql> show replica status\G *************************** 1. row *************************** Replica_IO_State: Waiting for master to send event Source_User: rdsrepladmin Source_Port: 3306 Connect_Retry: 60 Source_Log_File: mysql-bin-changelog.000478 Read_Source_Log_Pos: 573 Relay_Log_File: relaylog.001404 Relay_Log_Pos: 808 Relay_Source_Log_File: mysql-bin-changelog.000478 Replica_IO_Running: Yes Replica_SQL_Running: Yes Seconds_Behind_Source: 0 Source_SSL_Verify_Server_Cert: No Source_Server_Id: 37504907 Source_UUID: b6b15f85-687b-11ec-83ff-0ab03cadc1ac Source_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Replica_SQL_Running_State: Slave has read all relay log; waiting for more updates Source_Retry_Count: 86400 Retrieved_Gtid_Set: b6b15f85-687b-11ec-83ff-0ab03cadc1ac:16-471 Executed_Gtid_Set: b6b15f85-687b-11ec-83ff-0ab03cadc1ac:1-471 Auto_Position: 0 Replicate_Rewrite_DB:
복제는 정상적으로 되고 있으나 복제 상태에서 보면 Auto_Position 이 0 인 것으로 확인할 수 있습니다.
그럼 AWS RDS 인스턴스에서 사용할 수 있는 시스템 프로시저 중에서 rds_set_master_auto_position 이 있으며 해당 프로시저를 사용해보도록 하겠습니다
Auto Position 를 활성화하여 복제 모드를 전역 트랜잭션 식별자(GTID)를 기반으로 설정하는 것입니다.
mysql> call mysql.rds_set_master_auto_position(1); ERROR 1305 (42000): PROCEDURE mysql.rds_set_master_auto_position does not exist
RDS 8.0.25 버전에서는 위와 같이 해당 파라미터가 없기 때문에 Auto_Position=1 로 설정할 수가 없습니다.
이번에는 8.0.26 에서 확인해보도록 하겠습니다.
mysql> select @@version; +-----------+ | @@version | +-----------+ | 8.0.26 | +-----------+ mysql> select routine_schema,routine_name -> from information_schema.routines -> where ROUTINE_NAME='rds_set_master_auto_position'; +----------------+------------------------------+ | ROUTINE_SCHEMA | ROUTINE_NAME | +----------------+------------------------------+ | mysql | rds_set_master_auto_position | +----------------+------------------------------+
8.0.26 부터는 mysql.rds_set_master_auto_position 프로시저가 존재하며 사용할 수 있습니다.
또한 8.0.26 은 아래와 Auto_Position 이 1 로 설정되어 있는 것을 확인할 수 있습니다.
Source_Server_Id: 2138304240 Source_UUID: d14c0672-69fb-11ec-be74-021520bb69ee Source_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Replica_SQL_Running_State: Slave has read all relay log; waiting for more updates Source_Retry_Count: 86400 Source_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Source_SSL_Crl: Source_SSL_Crlpath: Retrieved_Gtid_Set: d14c0672-69fb-11ec-be74-021520bb69ee:19-55 Executed_Gtid_Set: d14c0672-69fb-11ec-be74-021520bb69ee:1-55 Auto_Position: 1 <-- 읽기 전용 복제 인스턴스를 생성 후 확인 하면 활성화 되어 있음 Replicate_Rewrite_DB: Channel_Name: Source_TLS_Version: Source_public_key_path: Get_Source_public_key: 0 Network_Namespace:
프로시저를 변경하여 Auto_Position 변경을 확인해보도록 하겠습니다.
mysql> call mysql.rds_set_master_auto_position(0); +-----------------------------------------+ | Message | +-----------------------------------------+ | Master Auto Position has been set to 0. | +-----------------------------------------+ 1 row in set (0.07 sec) +---------------------------+ | Message | +---------------------------+ | Slave is running normally | +---------------------------+ 1 row in set (2.07 sec) mysql> show replica status\G < ...중략 ... > Source_Server_Id: 2138304240 Source_UUID: d14c0672-69fb-11ec-be74-021520bb69ee Source_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Replica_SQL_Running_State: Slave has read all relay log; waiting for more updates Source_Retry_Count: 86400 Source_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Source_SSL_Crl: Source_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: d14c0672-69fb-11ec-be74-021520bb69ee:1-56 Auto_Position: 0 <-- 0 으로 변경 됨 Replicate_Rewrite_DB: Channel_Name: Source_TLS_Version: Source_public_key_path: Get_Source_public_key: 0 Network_Namespace:
변경되는 것을 확인할 수 있으며 다시 활성화도 해보겠습니다.
mysql> call mysql.rds_set_master_auto_position(1); +-----------------------------------------+ | Message | +-----------------------------------------+ | Master Auto Position has been set to 1. | +-----------------------------------------+ 1 row in set (0.03 sec) +---------------------------+ | Message | +---------------------------+ | Slave is running normally | +---------------------------+ 1 row in set (2.03 sec) mysql> show replica status\G < ...중략 ... > Source_Server_Id: 2138304240 Source_UUID: d14c0672-69fb-11ec-be74-021520bb69ee Source_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Replica_SQL_Running_State: Slave has read all relay log; waiting for more updates Source_Retry_Count: 86400 Source_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Source_SSL_Crl: Source_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: d14c0672-69fb-11ec-be74-021520bb69ee:1-56 Auto_Position: 1 <-- 다시 1 로 변경 됨 Replicate_Rewrite_DB: Channel_Name: Source_TLS_Version: Source_public_key_path: Get_Source_public_key: 0 Network_Namespace:
위에서 확인할 수 있는 것처럼 AWS RDS 8.0.26 버전과 이전 버전은 Auto_Position 사용 유무에서 차이가 난다는 것을 확인할 수 있습니다
(Auto_Position 관련해서 팀원인 @Esther 이 정보 확인에 도움을 주셨습니다.)
그리고 포스팅에서는 다루지 않았지만 8.0.26 버전부터 GTID 지원 이외 지연 복제(Delayed Replication) 도 지원하기 시작하였습니다.
이어지는 다음 글
Reference
Reference Link
aws.amazon.com/mysql-replication-gtid
aws.amazon.com/8-0-26-global-transaction
aws.amazon.com/Appendix.MySQL.SQLRef
관련된 다른 글
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