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

Share

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


관련된 다른 글

 

 

 

 

     

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x