오라클 클라우드 MySQL Database Service (3) - MDS - Oracle Cloud

Share

Last Updated on 3월 5, 2023 by Jade(정현호)

안녕하세요 
이번 포스팅에서는 오라클 클라우드 MDS DB Instance 에 대한 복제(replication) 구성과 Configuration(parameter) 변경에 대해서 확인 해보려고 합니다.

오라클 클라우드 MySQL Database Service 의 생성 및 접속 관련된 내용은 아래 이전 포스팅을 확인 하시면 됩니다.

 

        

1. Replication 유저 생성

오라클 클라우드 MDS 의 replication 도 보통의 MySQL의 Replication 과 동일하게 Replication 유저가 필요 합니다.

Master 인스턴스 에서 생성 하면 되며 유저명은 repl_user 으로 하겠습니다.

mysql> create user 'repl_user'@'%' identified by 'Repl_user12#$';
mysql> grant replication slave,replication client on *.* to 'repl_user'@'%';


* 유저 명과 패스워드는 포스팅 상의 예시 입니다.
             

2. 백업으로 부터 새 DB 생성

오라클 클라우드 MDS 는 자동 및 수동 백업을 지원하며 백업 파일로 부터 새로운 데이터베이스의 생성이 가능하고 쉽게 지원하기 때문에 백업을 통해 Replica 인스턴스 를 구성하겠습니다.


2-1 백업 -> 점 3개 -> 새 DB 시스템으로 복원  을 선택 합니다.




2-2 새로운 DB 인스턴스의 이름과 설명을 입력 합니다.




2-3 구성 선택 항목이 있으며 필요 시 변경 할 수 있습니다 하단의 다음 을 클릭 합니다.




2-4 관리자 아이디와 패스워드를 입력 합니다 그리고 하단에 호스트명을 꼭 입력 합니다. 포스팅에서는 인스턴스명과 동일하게 입력 하였습니다. 입력이 완료 되었다면 다음을 클릭 합니다.




2-5 백업 여부를 선택 후 생성 을 클릭 합니다.




2-6 생성이 완료 되었다면 아래와 같이 소스 에는 BACKUP 으로 확인되며 그 외 Endpoint 와 IP 정보 등을 확인 할 수 있습니다.




[추가 정보] 포스팅 시점 현재까지 Oracle Cloud MDS 의 디스크 스토리지 사이즈의 증가는 불가능 합니다 

• 관련 MOS Doc

MySQL DB System (MDS) - Disk Full - How-to Add or Extend Block Storage (Doc ID 2713670.1)
Resize a DbSystem storage while restoring a backup on MySQL Database Service (Doc ID 2782987.1)


[업데이트] MySQL Server 8.0.27-u3-cloud 버전 부터 디스크 증가 기능이 추가 되었습니다.
관련 문서 링크

8.0.27 이전 버전을 사용중인 MDS 인스턴스의 용량을 늘리기 위해서는 백업본을 통해서 복구 시 용량을 증가 하여 복구 하는 방법을 사용해야 합니다. 백업을 통해 복구 절차는 위의 내용을 참조하시면 되며 복구 중 아래 이미지에 해당 부분에서 디스크 스토리지 사이즈를 변경하여 복구를 진행하면 됩니다.



8.0.27 이상 버전으로 업그레이드 하거나 8.0.27 이상 버전을 사용할 경우 시스템에서 스토리지 용량 증가가 가능 합니다.
                   

3. 스토리지 용량 증가

MDS(MySQL Database Service) 에서 제공 하는 버전 중에서 MySQL 8.0.27-u3-cloud 이상 버전을 사용할 경우 온라인 중에 디스크 스토리지 용량 증가가 가능합니다.(이전 버전까지는 불가능 하였음)

MDS 인스턴스에서 작업 더보기 -> 스토리지 크기 업데이트 메뉴에서 진행할 수 있습니다.



아래와 같이 원하는 용량을 입력 후 하단의 업데이트 버전을 눌러서 스토리지 사이즈 증가(변경) 할 수 있습니다.
작업은 온라인중으로 진행 됩니다.




포스팅 업데이트 시점에서 스토리지 변경 정책(Policy) 는 아래와 같습니다.
"초기 스토리지가 400GB 이하인 DB 시스템의 스토리지 크기는 32TB로, 초기 스토리지가 400GB를 초과하는 DB 시스템의 스토리지 크기는 64TB로 늘릴 수 있습니다."



32TB 이상으로 사용하려는 시스템의 경우는 생성시 초기 스토리지 사이즈도 고려를 해야 합니다.
            

4. 수신 규칙 추가

MDS Instance 간에도 통신을 하기 위해서 Private Subnet 에 수신 규칙의 추가가 필요 합니다.


4-1 하단의 구획을 확인 후 -> 서브넷 으로 이동 합니다. 그리고 CIDR 블럭 정보를 확인 합니다 포스팅 환경에서는 10.0.1.0/24 입니다  전용 서브넷(Private Subnet) 을 클릭 합니다.




4-2 전용 서브넷 보안 목록 을 클릭 합니다.




4-3 수신 규칙 추가 를 클릭 합니다.




4-4 소스  CIDR 에는 위에서 확인 한 전용 서브넷 CIDR 를 입력 합니다 포스팅 환경에서는 10.0.1.0/24 입니다. 그 다음 대상 포트 범위에 3306 를 입력 합니다. 설명 란에는 간략하게 내용을 입력 후 하단의 수신 규칙 추가 버튼을 클릭 합니다.




4-5 이미지에서는 이전에 배스천 서버에서의 접속을 위해 추가한 수신 규칙 과 지금 추가한 내역을 확인할 수 있습니다.




5. 채널 생성

오라클 클라우드 MDS 에서는 Replication 을 채널(channel) 이라고 하며 채널을 생성 하도록 하겠습니다.


5-1 DB 인스턴스 하단의 채널 -> 채널 생성 을 클릭 합니다. 




채널 생성 시작은 DB 인스턴스 외 메뉴에서도 들어갈 수 있습니다




5-2 채널을 입력 후 아래에 "소스 접속" 항목의 호스트 이름에는 Master 서버(소스 서버) 의 IP나 Endpoint 정보를 입력 해 줍니다. 그 다음 사용자 이름 과 비밀번호는 위에서 생성한 replication 유저의 정보를 입력 합니다.




5-3 SSL 모드는 default 로 선택되어 있는 필요 로 선택하고 아래 항목으로 이동 합니다.




5-4 대상(Replica/Target) DB 시스템을 선택하면 되며 Replica 인스턴스에서 채널 구성을 시작 하게 되면 아래와 같이 대상 시스템에 선택되게 됩니다. 채널 구성을 통해서 생성을 진행 한다면 오른쪽 "DB 시스템"  변경을 클릭하여 복제 대상 시스템을 선택하면 됩니다.
선택이 완료 되었다면 하단의 "채널 생성" 을 클릭 합니다.




5-5 채널을 생성 하게 되면 아래와 같이 Replica 인스턴스는 업데이트 중 으로 상태가 변하게 됩니다.




5-6 처리 될 내역이 모두 완료 되었다면 아래와 같이 활성 으로 다시 상태가 변경 되게 됩니다.




5-7 채널 에서 확인 하였을 때 정상적으로 구성 되었다면 아래와 같이 상태가 활성 으로 확인 되게 됩니다.


          

6. 복제 정보 확인 및 테스트

Replication(복제) 이 구성된 이후에 상태 확인 및 간단하게 테이블 과 데이터를 입력해보도록 하겠습니다.


6-1 상태 확인

Source -Master 는 마스터 서버 이고 ,  복제 대상은 Target - Replica 로 표기 하였습니다.
Replica 의 Server ID는 2807790747 로 확인 됩니다.

# Source - Master

mysql> show master status\G
*************************** 1. row ***************************
             File: binary-log.000056
         Position: 196
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: c3bae1f6-7a74-11eb-9bd7-020017084359:1-21
1 row in set (0.0008 sec)

mysql> show replicas\G
*************************** 1. row ***************************
   Server_Id: 2807790747
        Host: 
        Port: 3306
   Source_Id: 2022394952
Replica_UUID: 17a0e0f6-7a8d-11eb-adb1-0200170892d3
1 row in set (0.0008 sec)



# Target - Replica
SQL > show replica status\G
*************************** 1. row ***************************
             Replica_IO_State: Waiting for master to send event
                  Source_Host: mysql-MDS1.sub02280924451.vcn1.oraclevcn.com
                  Source_User: repl_user
                  Source_Port: 3306
                Connect_Retry: 60
              Source_Log_File: binary-log.000052
          Read_Source_Log_Pos: 196
               Relay_Log_File: relay-log-replication_channel.000002
                Relay_Log_Pos: 373
        Relay_Source_Log_File: binary-log.000052
           Replica_IO_Running: Yes
          Replica_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Source_Log_Pos: 196
              Relay_Log_Space: 596
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Source_SSL_Allowed: Yes
           Source_SSL_CA_File:
           Source_SSL_CA_Path:
              Source_SSL_Cert:
            Source_SSL_Cipher:
               Source_SSL_Key:
        Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Source_Server_Id: 2022394952
                  Source_UUID: c3bae1f6-7a74-11eb-9bd7-020017084359
             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: 0
                  Source_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Source_SSL_Crl:
           Source_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set: c3bae1f6-7a74-11eb-9bd7-020017084359:1-3
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name: replication_channel
           Source_TLS_Version: TLSv1.2,TLSv1.3
       Source_public_key_path:
        Get_Source_public_key: 1
            Network_Namespace: mysql
1 row in set (0.0009 sec)



6-2 데이터 베이스 확인 및 생성

테이블을 생성 하기 위해서 test 라는 데이터베이스(Schema) 를 생성 하였고 복제도 정상적으로 이루어졌습니다.

# Source - Master
SQL > select @@hostname,@@version,@@server_id, user() ;
+------------------+-----------------+-------------+-----------------+
| @@hostname       | @@version       | @@server_id | user()          |
+------------------+-----------------+-------------+-----------------+
| r8uklqhg0givcdhi | 8.0.23-u2-cloud |  2022394952 | master@........ |
+------------------+-----------------+-------------+-----------------+

SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+



# Target - Replica
SQL > select @@hostname,@@version,@@server_id, user() ;
+------------------+-----------------+-------------+-----------------+
| @@hostname       | @@version       | @@server_id | user()          |
+------------------+-----------------+-------------+-----------------+
| crotp1hnq2uuc4jz | 8.0.23-u2-cloud |  2807790747 | master@........ |
+------------------+-----------------+-------------+-----------------+

SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+




# Source - Master
mysql> create database test;

SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+



# Target - Replica
SQL > show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+



6-3 테이블 생성 및 데이터 입력

테이블 생성 및 데이터 입력 후 건수 를 확인 해보겠습니다.
구성에는 특이사항 없이, Replication 은 정상적으로 이루어 지는 것을 확인 할 수 있습니다.

# Source - Master

mysql> use test;

mysql> CREATE TABLE emp ( 
    empno int  NOT NULL  AUTO_INCREMENT,
    ename varchar(20),
    job varchar(20),
    mgr smallint,
    hiredate   date,
    sal numeric(7,2),
    comm numeric(7,2),
    deptno  int,
    CONSTRAINT pk_emp PRIMARY KEY ( empno )
 ) engine=InnoDB;


insert into emp values( 7839, 'KING', 'PRESIDENT', null, STR_TO_DATE ('17-11-1981','%d-%m-%Y'), 5000, null, 10);
insert into emp values( 7698, 'BLAKE', 'MANAGER', 7839, STR_TO_DATE('1-5-1981','%d-%m-%Y'), 2850, null, 30);
insert into emp values( 7782, 'CLARK', 'MANAGER', 7839, STR_TO_DATE('9-6-1981','%d-%m-%Y'), 2450, null, 10);
insert into emp values( 7566, 'JONES', 'MANAGER', 7839, STR_TO_DATE('2-4-1981','%d-%m-%Y'), 2975, null, 20);
insert into emp values( 7788, 'SCOTT', 'ANALYST', 7566, DATE_ADD(STR_TO_DATE('13-7-1987','%d-%m-%Y'),INTERVAL -85 DAY)  , 3000, null, 20);
insert into emp values( 7902, 'FORD', 'ANALYST', 7566, STR_TO_DATE('3-12-1981','%d-%m-%Y'), 3000, null, 20);
insert into emp values( 7369, 'SMITH', 'CLERK', 7902, STR_TO_DATE('17-12-1980','%d-%m-%Y'), 800, null, 20);
insert into emp values( 7499, 'ALLEN', 'SALESMAN', 7698, STR_TO_DATE('20-2-1981','%d-%m-%Y'), 1600, 300, 30);
insert into emp values( 7521, 'WARD', 'SALESMAN', 7698, STR_TO_DATE('22-2-1981','%d-%m-%Y'), 1250, 500, 30);
insert into emp values( 7654, 'MARTIN', 'SALESMAN', 7698, STR_TO_DATE('28-09-1981','%d-%m-%Y'), 1250, 1400, 30);
insert into emp values( 7844, 'TURNER', 'SALESMAN', 7698, STR_TO_DATE('8-9-1981','%d-%m-%Y'), 1500, 0, 30);
insert into emp values( 7876, 'ADAMS', 'CLERK', 7788, DATE_ADD(STR_TO_DATE('13-7-1987', '%d-%m-%Y'),INTERVAL -51 DAY), 1100, null, 20);
insert into emp values( 7900, 'JAMES', 'CLERK', 7698, STR_TO_DATE('3-12-1981','%d-%m-%Y'), 950, null, 30);
insert into emp values( 7934, 'MILLER', 'CLERK', 7782, STR_TO_DATE('23-1-1982','%d-%m-%Y'), 1300, null, 10);


mysql> select count(*) from emp;
+----------+
| count(*) |
+----------+
|       14 |
+----------+




# Target - Replica

mysql> select @@hostname,@@version,@@server_id, user() ;
+------------------+-----------------+-------------+-----------------+
| @@hostname       | @@version       | @@server_id | user()          |
+------------------+-----------------+-------------+-----------------+
| crotp1hnq2uuc4jz | 8.0.23-u2-cloud |  2807790747 | master@10.0.0.2 |
+------------------+-----------------+-------------+-----------------+

mysql> select count(*) from test.emp;
+----------+
| count(*) |
+----------+
|       14 |
+----------+

            

7. 구성 변경(파라미터 변경)

구성된 MDS 인스턴스의 파라미터를 변경을 진행 하겠습니다.


7-1 마스터 인스턴스에서 구성 -> 구성 링크 를 클릭 합니다.




7-2 현재 사용중인 파라미터 항목과 값을 확인 할 수 있습니다. 변경하기 위해서는 구성 복사를 클릭 합니다.




7-3 구성에 대한 이름을 입력 합니다. 입력 후 하단의 다음 을 클릭 합니다.




7-4 여러 파라미터가 보이며, 리스트에 없는 파라미터의 경우 아래 다른 변수를 클릭 하여 추가 하면 됩니다. 포스팅에서는 max_connections 를 500 에서 1000 으로 변경 하겠습니다. 변경 완료 후에 하단의 "복사" 버튼을 클릭 합니다.




7-5 복사 가 완료 되었다면 아래와 같이 확인 할 수 있습니다.




7-6 MDS인스턴스 목록에서 1번 - 점3개 클릭 -> 2번 편집 을 선택 합니다.




7-7 하단의 구성의 변경시 DB 재시작이 된다는 문구가 보입니다. 구성 변경 버튼을 클릭 합니다. 




7-8 위에서 생성한 config 를 선택 후 "구성 선택" 버튼을 누릅니다.




7-9 최종적으로 "변경사항 저장" 을 클릭하면 DB 인스턴스 재시작과 함께 적용되게 됩니다.




[업데이트] 온라인으로 적용 가능한 것으로 기능 개선이 되었습니다.




재시작 하는 동안에는 접속 끊김이 발생 합니다.
내용 업데이트 : 최근 버전에서는 온라인 중에 변경 됩니다.



6-10 변경시 아래와 같이 업데이트 중으로 상태가 확인 됩니다.




6-11 재시작이 완료 되면 아래와 같이 활성 상태가 되며 구성 정보는 위에서 별도로 생성하여 적용한 구성 명 이 보이는걸 확인 할 수 있습니다.




6-12 접속 하여 조회하였을때도 파라미터는 정상적으로 변경(반영) 된 것으로 확인 됩니다.


          

7. Conclusion

지금 까지 사용 및 테스트를 해오면서 중간 정리를 해본다면 결론적으로 타사 대비 지원 되지 않은 기능이 몇가지 있다보니 다소 아쉽다 정도로 느껴집니다. HeatWave 라는 분석 쿼리 엔진에 집중을 하여서 그런 것인지 아직 까지 몇가지 다소 아쉬운 부분이 있긴 합니다. 그 중에서 몇가지를 언급 하면


1) 포스팅 작성 시점(버전 8.0.23-u2-cloud 버전) 에서 처음 생성 시 설정한 Disk 사이즈의 변경이 지원되지 않습니다(자동,수동 모두)

MDS 인스턴스의 디스크 스토리지 사이즈를 증가 시키기 위해서는 백업본을 통해서 복구 절차 과정에서 디스크 스토리지를 변경(증가) 하여 복구 하는 절차를 이용해야 합니다.

• 관련 MOS Doc
MySQL DB System (MDS) - Disk Full - How-to Add or Extend Block Storage (Doc ID 2713670.1)
Resize a DbSystem storage while restoring a backup on MySQL Database Service (Doc ID 2782987.1)

[업데이트] MySQL 8.0.27-u3-cloud 버전부터 인스턴스 관리 페이지(웹)에서 용량 증가 가능 합니다.


2) Replication 이 복제 까지만 기능 지원이 되고 그 이후 take-over(롤 체인지) 와 같은 기능이 없으며 vip 형태의 cluster Endpoint 가 없습니다. 또한 Replica 인스턴스가 read/write 로 운영 되고 read only 로 변경 하는 메뉴가 없습니다.(파라미터 에도 없음)



내용 업데이트 : 2021/03/31 에 MySQL Database Service High Availability 기능이 추가 되었습니다.


Ref link. Oracle Cloud Release Notes [Link]
관련된 내용은 다음 포스팅을 참조하시면 됩니다(MDS 5번째 글)



3) MySQL 5.6 버전이 21년 2월 초 EOS 되면서 버전의 범위가 5.7 또는 8.0 에서 선택해야 하지만 MDS 인스턴스 생성 시 버전에 대해서 선택 할 수 없습니다.

[업데이트] 버전 선택이 가능하고 최신 버전에 대해서만 일부 가능 합니다.




4) MySQL 에서는 Online 으로 변경 되는 파라미터가 있지만, MDS 에서는 구성 변경시 구성을 복제 해야 합니다.(해당 기능은 동일)
그리고 적용하기 위해서 재 시작을 해야 한다는 거 입니다. -> 이 부분은 다시 확인 하였을 때 온라인으로 적용되는 형태로 개선이 된 것으로 확인 됩니다.


5) mysql.err 과 같은 로그 파일을 볼수 있는 웹 뷰어가 제공되지 않아서 로그를 확인 할 수 없습니다.


이러한 아쉬움이 있지만 그래도 Enterprise 기능 사용할 수 있다는 점과 오라클 에서 직접 서포트 등이 이루어지고 온프레미스 MySQL 과 버전이 거의 동일하게 가져간다는 점 등이 장점이라고 볼수 있을 것 같습니다.

다음 포스팅에서는 SSH 터널링을 통한 MDS 데이터 이관 과 DR 형태로 사용할 수 있는 다른 클라우드나 IDC 와의 Replication 을 구성을 해보겠습니다.


이어지는 글



관련 된 다른 글

 

 

 

 

 

 

 

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