

# Amazon RDS SQL의 MariaDB 참조
<a name="Appendix.MariaDB.SQLRef"></a>

아래에는 MariaDB DB 엔진을 실행 중인 Amazon RDS 인스턴스에 사용할 수 있는 시스템 저장 프로시저에 대한 설명이 나와 있습니다.

MySQL DB 인스턴스 및 MariaDB DB 인스턴스에 사용할 수 있는 시스템 저장 프로시저를 사용할 수 있습니다. 이러한 저장 프로시저는 [RDS for MySQL 저장 프로시저 참조](Appendix.MySQL.SQLRef.md)에 소개되어 있습니다. MariaDB DB 인스턴스는 `mysql.rds_start_replication_until` 및 `mysql.rds_start_replication_until_gtid`를 제외한 모든 저장 프로시저를 지원합니다.

또한 다음은 MariaDB를 실행 중인 Amazon RDS DB 인스턴스에 대해서만 지원되는 시스템 저장 프로시저입니다.
+ [mysql.rds\$1replica\$1status](mysql_rds_replica_status.md)
+ [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md)
+ [mysql.rds\$1kill\$1query\$1id](mysql_rds_kill_query_id.md)
+ [mysql.rds\$1execute\$1operation](mysql_rds_execute_operation.md)

# mysql.rds\$1replica\$1status
<a name="mysql_rds_replica_status"></a>

MariaDB 읽기 전용 복제본의 복제 상태를 표시합니다.

읽기 전용 복제본에서 이 프로시저를 호출하여 복제본 스레드의 필수 파라미터에 대한 상태 정보를 표시합니다.

## 구문
<a name="mysql_rds_replica_status-syntax"></a>

```
CALL mysql.rds_replica_status;
```

## 사용 노트
<a name="mysql_rds_replica_status-usage-notes"></a>

이 프로시저는 MariaDB 버전 10.5 이상을 실행하는 MariaDB DB 인스턴스에 대해서만 지원됩니다.

이 프로시저는 `SHOW REPLICA STATUS` 명령과 동일합니다. MariaDB 버전 10.5 이상 DB 인스턴스에서는 이 명령이 지원되지 않습니다.

이전 버전의 MariaDB에서 상응하는 `SHOW SLAVE STATUS` 명령에는 `REPLICATION SLAVE` 권한이 필요했습니다. MariaDB 버전 10.5 이상에서는 `REPLICATION REPLICA ADMIN` 권한이 필요합니다. MariaDB 10.5 이상 DB 인스턴스의 RDS 관리 권한을 보호하기 위해 이 새 권한은 RDS 마스터 사용자에게 부여되지 않습니다.

## 예시
<a name="mysql_rds_replica_status-examples"></a>

다음 예에서는 MariaDB 읽기 전용 복제본의 상태를 보여 줍니다.

```
call mysql.rds_replica_status;
```

응답은 다음과 유사합니다.

```
*************************** 1. row ***************************
                Replica_IO_State: Waiting for master to send event
                     Source_Host: XX.XX.XX.XXX
                     Source_User: rdsrepladmin
                     Source_Port: 3306
                   Connect_Retry: 60
                 Source_Log_File: mysql-bin-changelog.003988
             Read_Source_Log_Pos: 405
                  Relay_Log_File: relaylog.011024
                   Relay_Log_Pos: 657
           Relay_Source_Log_File: mysql-bin-changelog.003988
              Replica_IO_Running: Yes
             Replica_SQL_Running: Yes
                 Replicate_Do_DB:
             Replicate_Ignore_DB:
              Replicate_Do_Table:
          Replicate_Ignore_Table: mysql.rds_sysinfo,mysql.rds_history,mysql.rds_replication_status
         Replicate_Wild_Do_Table:
     Replicate_Wild_Ignore_Table:
                      Last_Errno: 0
                      Last_Error:
                    Skip_Counter: 0
             Exec_Source_Log_Pos: 405
                 Relay_Log_Space: 1016
                 Until_Condition: None
                  Until_Log_File:
                   Until_Log_Pos: 0
              Source_SSL_Allowed: No
              Source_SSL_CA_File:
              Source_SSL_CA_Path:
                 Source_SSL_Cert:
               Source_SSL_Cipher:
                  Source_SSL_Key:
           Seconds_Behind_Master: 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: 807509301
                  Source_SSL_Crl:
              Source_SSL_Crlpath:
                      Using_Gtid: Slave_Pos
                     Gtid_IO_Pos: 0-807509301-3980
         Replicate_Do_Domain_Ids:
     Replicate_Ignore_Domain_Ids:
                   Parallel_Mode: optimistic
                       SQL_Delay: 0
             SQL_Remaining_Delay: NULL
       Replica_SQL_Running_State: Reading event from the relay log
              Replica_DDL_Groups: 15
Replica_Non_Transactional_Groups: 0
    Replica_Transactional_Groups: 3658
1 row in set (0.000 sec)

Query OK, 0 rows affected (0.000 sec)
```

# mysql.rds\$1set\$1external\$1master\$1gtid
<a name="mysql_rds_set_external_master_gtid"></a>

Amazon RDS 외부에서 실행 중인 MariaDB 인스턴스에서 MariaDB DB 인스턴스로의 GTID 기반 복제를 구성합니다. 이 프로시저는 외부 MariaDB 인스턴스가 버전 10.0.24 이상인 경우에만 지원됩니다. 두 인스턴스 중 하나 또는 모두가 MariaDB 전역 트랜잭션 ID(GTID)를 지원하지 않는 복제를 설정하는 경우 다음([mysql.rds\$1set\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](mysql-stored-proc-replicating.md#mysql_rds_set_external_master))을 사용하십시오.

복제 시 GTID를 사용하면 이진 로그 복제에서는 제공하지 않는 충돌 안정성 기능을 제공하므로 복제 인스턴스가 지원하는 경우에는 GTID 기반 복제를 사용하는 것이 좋습니다.

## 구문
<a name="mysql_rds_set_external_master_gtid-syntax"></a>

 

```
CALL mysql.rds_set_external_master_gtid(
  host_name
  , host_port
  , replication_user_name
  , replication_user_password
  , gtid
  , ssl_encryption
);
```

## 파라미터
<a name="mysql_rds_set_external_master_gtid-parameters"></a>

 *host\$1name*   
문자열. 소스 인스턴스가 될 Amazon RDS 외부에서 실행 중인 MariaDB 인스턴스의 호스트 이름 또는 IP 주소입니다.

 *host\$1port*   
정수. 소스 인스턴스로 구성될 Amazon RDS 외부에서 실행 중인 MariaDB 인스턴스에서 사용하는 포트입니다. 네트워크 구성에 포트 번호를 변환하는 SSH 포트 복제가 포함되는 경우 SSH에 의해 공개되는 포트 이름을 지정하십시오.

 *replication\$1user\$1name*   
문자열. 읽기 전용 복제본으로 구성될 MariaDB DB 인스턴스에서 `REPLICATION SLAVE` 권한이 있는 사용자의 ID입니다.

 *replication\$1user\$1password*   
문자열. `replication_user_name`에 지정된 사용자 ID의 암호입니다.

 *gtid*   
문자열. 복제를 시작해야 하는 소스 인스턴스의 전역 트랜잭션 ID.  
복제를 구성하는 동안 소스 인스턴스가 잠긴다면 `@@gtid_current_pos`를 사용하여 현재 GTID를 가져올 수 있습니다. 그러므로 GTID를 가져오는 시점과 복제가 시작하는 시점 사이에서 이진 로그가 변경되지 않습니다.  
또는 복제를 시작하기 전에 `mysqldump` 버전 10.0.13 이상을 사용하여 복제본 인스턴스를 채우는 경우 `--master-data` 또는 `--dump-slave` 옵션을 사용하여 출력 내 GTID 위치를 가져올 수 있습니다. `mysqldump` 버전 10.0.13 이상을 사용하지 않는 경우에는 `SHOW MASTER STATUS`를 실행하거나 동일한 `mysqldump` 옵션을 사용하여 이진 로그 파일 이름 및 위치를 가져온 다음, 외부 MariaDB 인스턴스에서 `BINLOG_GTID_POS`옵션을 실행해 GTID로 변환할 수 있습니다.  

```
SELECT BINLOG_GTID_POS('<binary log file name>', <binary log file position>);
```
GTID의 MariaDB 구현에 대한 자세한 내용은 MariaDB 설명서에서 [전역 트랜잭션 ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/)를 참조하십시오.

 *ssl\$1encryption*   
복제 연결에 보안 소켓 계층(SSL) 암호화를 사용할지 여부를 지정하는 값입니다. 1은 SSL 암호화 사용, 0은 암호화 사용 안 함입니다. 기본값은 0입니다.  
`MASTER_SSL_VERIFY_SERVER_CERT` 옵션은 지원되지 않습니다. 이 옵션은 0으로 설정되어 있는데, 이는 연결이 암호화되었지만 인증서는 확인되지 않았음을 의미합니다.

## 사용 노트
<a name="mysql_rds_set_external_master_gtid-usage-notes"></a>

`mysql.rds_set_external_master_gtid` 프로시저는 마스터 사용자가 실행해야 합니다. Amazon RDS 외부에서 실행 중인 MariaDB DB 인스턴스의 복제본으로 구성하려는 MariaDB DB 인스턴스에서 실행해야 합니다. `mysql.rds_set_external_master_gtid`를 실행하기 전에 Amazon RDS 외부에서 실행 중인 MariaDB의 인스턴스를 소스 인스터스로 구성해야 합니다. 자세한 내용은 [Amazon RDS for MariaDB DB 인스턴스로 데이터 가져오기](MariaDB.Procedural.Importing.md) 섹션을 참조하세요.

**주의**  
`mysql.rds_set_external_master_gtid`를 사용하여 두 Amazon RDS DB 인스턴스 간 복제를 관리하지 마십시오. RDS 외부에서 실행 중인 MariaDB 인스턴스를 복제할 때만 사용합니다. Amazon RDS DB 인스턴스 간 복제 관리에 대한 자세한 내용은 [DB 인스턴스 읽기 전용 복제본 작업](USER_ReadRepl.md) 주제를 참조하십시오.

`mysql.rds_set_external_master_gtid`를 호출하여 Amazon RDS DB 인스턴스를 읽기 전용 복제본으로 구성한 후 복제본에서 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)을 호출하여 복제 프로세스를 시작할 수 있습니다. [mysql.rds\$1reset\$1external\$1master(RDS for MariaDB 및 RDS for MySQL 메이저 버전 8.0 이하)](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master)를 호출하여 읽기 전용 복제본 구성을 제거할 수 있습니다.

`mysql.rds_set_external_master_gtid`가 호출되면 Amazon RDS에서 `mysql.rds_history` 및 `mysql.rds_replication_status` 테이블에 시간, 사용자 및 "set master" 작업을 기록합니다.

## 예시
<a name="mysql_rds_set_external_master_gtid-examples"></a>

MariaDB DB 인스턴스에서 다음 예제를 실행하면 Amazon RDS 외부에서 실행 중인 MariaDB 인스턴스의 복제본으로 구성됩니다.

```
call mysql.rds_set_external_master_gtid ('Sourcedb.some.com',3306,'ReplicationUser','SomePassW0rd','0-123-456',0); 
```

# mysql.rds\$1kill\$1query\$1id
<a name="mysql_rds_kill_query_id"></a>

장기 실행 또는 문제가 있는 쿼리를 종료하기 위해 MariaDB 서버에 대해 실행되는 쿼리를 종료합니다. 쿼리 ID를 식별하고 특정 쿼리를 효과적으로 중지하여 성능 문제를 해결하고 최적의 데이터베이스 운영을 유지할 수 있습니다.

## 구문
<a name="mysql_rds_kill_query_id-syntax"></a>

```
CALL mysql.rds_kill_query_id(queryID);
```

## 파라미터
<a name="mysql_rds_kill_query_id-parameters"></a>

 *queryID*   
정수. 종료할 쿼리의 ID입니다.

## 사용 노트
<a name="mysql_rds_kill_query_id-usage-notes"></a>

MariaDB 서버에서 실행 중인 쿼리를 중지하려면 `mysql.rds_kill_query_id` 프로시저를 사용하여 해당 쿼리의 ID를 전달합니다. 쿼리 ID를 가져오려면, 다음과 같이 MariaDB [Information Schema PROCESSLIST 테이블](http://mariadb.com/kb/en/mariadb/information-schema-processlist-table/)을 쿼리합니다

```
SELECT USER, HOST, COMMAND, TIME, STATE, INFO, QUERY_ID FROM 
                INFORMATION_SCHEMA.PROCESSLIST WHERE USER = '<user name>';
```

MariaDB 서버와의 연결은 유지됩니다.

## 예시
<a name="mysql_rds_kill_query_id-examples"></a>

다음 예제는 쿼리 ID가 230040인 쿼리를 종료합니다.

```
call mysql.rds_kill_query_id(230040); 
```

# mysql.rds\$1execute\$1operation
<a name="mysql_rds_execute_operation"></a>

InnoDB 작업을 실행하여 버퍼 풀 상태와 임시 테이블스페이스를 관리합니다. 이 절차는 버퍼 풀 상태 덤핑 및 로드 또는 임시 테이블스페이스 자르기와 같은 InnoDB 작업을 동적으로 제어하는 데 사용할 수 있습니다.

## 구문
<a name="mysql_rds_execute_operation-syntax"></a>

```
CALL mysql.rds_execute_operation(operation);
```

## 파라미터
<a name="mysql_rds_execute_operation-parameters"></a>

 *작업*   
문자열. 실행할 InnoDB 작업입니다. 유효한 값은 다음과 같습니다.  
+ *innodb\$1buffer\$1pool\$1dump\$1now* - 버퍼 풀의 현재 상태를 덤프하는 작업입니다.
+ *innodb\$1buffer\$1pool\$1load\$1now* - 저장된 버퍼 풀 상태를 로드하는 작업입니다.
+ *innodb\$1buffer\$1pool\$1load\$1abort* - 버퍼 풀 로드 작업을 중단하는 작업입니다.
+ *innodb\$1truncate\$1temporary\$1tablespace\$1now* - 임시 테이블스페이스를 잘라내는 작업입니다.

## 사용 노트
<a name="mysql_rds_execute_operation-usage-notes"></a>

이 프로시저는 MariaDB 버전 11.8 이상을 실행하는 MariaDB DB 인스턴스에 대해서만 지원됩니다.

실행 중에는 이러한 관리 명령의 복제를 방지하기 위해 바이너리 로깅이 일시적으로 비활성화됩니다.

이 절차는 [https://mariadb.com/docs/server/security/securing-mariadb/securing-mariadb-encryption/data-in-transit-encryption/securing-connections-for-client-and-server#requiring-tls](https://mariadb.com/docs/server/security/securing-mariadb/securing-mariadb-encryption/data-in-transit-encryption/securing-connections-for-client-and-server#requiring-tls) 테이블의 모든 작업을 로깅하여 감사 추적을 유지합니다.

## 예시
<a name="mysql_rds_execute_operation-examples"></a>

다음 예제에서는 `mysql.rds_execute_operation`을 사용한 임시 테이블스페이스 축소를 보여 줍니다.

현재 임시 테이블스페이스 크기를 확인하려면 다음 쿼리를 실행합니다.

```
      
SELECT FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE name LIKE 'innodb_temporary';
+------------+
| FILE_SIZE  |
+------------+
| 6723469312 |  -- 6.3 GB
+------------+
```

임시 테이블을 삭제해도 글로벌 테이블스페이스의 스토리지 사용량은 줄어들지 않습니다. 전역 테이블스페이스의 크기를 줄이려면 `mysql.rds_execute_operation` 명령을 실행하여 임시 테이블스페이스를 축소합니다.

```
 
CALL mysql.rds_execute_operation('innodb_truncate_temporary_tablespace_now');
Query OK, 2 rows affected (0.004 sec)
```

프로시저를 실행한 후 스페이스가 회수되었는지 확인합니다.

```
SELECT FILE_SIZE FROM information_schema.innodb_sys_tablespaces WHERE name LIKE 'innodb_temporary';
+-----------+
| FILE_SIZE |
+-----------+
|  12582912 |  -- 12 MB
+-----------+
```

**참고**  
 축소 작업은 임시 테이블스페이스 크기 및 현재 워크로드에 따라 시간이 걸릴 수 있습니다.

**중요**  
임시 테이블스페이스는 크기에 기여한 모든 임시 테이블을 더 이상 사용하지 않는 경우에만 축소됩니다. 인스턴스에 활성 임시 테이블스페이스가 없는 경우이 절차를 실행하는 것이 좋습니다.