본문 바로가기
[AWS-RDP]/RDS

[참고] Amazon RDS for MySQL (4) - 8.0 버전에서 변경 사항

by METAVERSE STORY 2023. 4. 4.
반응형

 

 

lower_case_table_names

Aamazon RDS for MySQL 에서는 8.0.19 이상 버전부터 1 (이름은 소문자로 저장 되며 비교 시 대소문자 구분 안 함) 으로 설정이 지원 됩니다.

기본값은 0(대소문자를 구분) 입니다. 

아래 링크에서 Amazon RDS DB 인스턴스에 대한 MySQL 파라미터 예외 에서 lower_case_table_names 항목을 참조 하시면 됩니다

 
Amazon RDS for MySQL에 대해 알려진 문제 및 제한 - Amazon Relational Database Service
Amazon RDS for MySQL 작업에 대해 알려진 문제 및 제한은 다음과 같습니다.


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 버전과 관련된 내용은 아래 포스팅 참조)

 

Amazon Aurora - MySQL 8.0 지원 - Amazon Aurora supports MySQL 8.0 - Amazon Aurora MySQL 3
안녕하세요 이번 포스팅에서는 MySQL 8.0 버전을 지원하는 Amazon 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:

 

 

 

출처 : https://hoing.io/archives/3196

반응형

댓글