

# Amazon RDS SQL での MariaDB リファレンス
<a name="Appendix.MariaDB.SQLRef"></a>

ここでは、MariaDB DB エンジンを実行する Amazon RDS インスタンスで使用できるシステムストアドプロシージャについて説明します。

MariaDB DB インスタンスと MySQL 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 以降である場合のみサポートされます。1 つまたは両方のインスタンスが MariaDB のグローバルトランザクション識別子 (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*   
レプリケーション接続で Secure Socket Layer (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 インスタンスのレプリカとして設定される、MariaDB DB インスタンスで実行する必要があります。`mysql.rds_set_external_master_gtid` を実行する前に、Amazon RDS の外部で動作する MariaDB インスタンスをソースインスタンスとして必ず設定してください。詳細については、「[Amazon RDS for MariaDB DB インスタンスへのデータのインポート](MariaDB.Procedural.Importing.md)」を参照してください。

**警告**  
2 つの Amazon RDS DB インスタンス間でレプリケーションを管理するために `mysql.rds_set_external_master_gtid` を使用しないでください。このストアドプロシージャは、RDS の外部で動作する 1 つの 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` テーブルに記録されます。

## 例
<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*   
整数。終了するクエリの識別子。

## 使用に関する注意事項
<a name="mysql_rds_kill_query_id-usage-notes"></a>

MariaDB サーバーに対して実行中のクエリを停止するには、`mysql.rds_kill_query_id` プロシージャを使用して、そのクエリの ID を渡します。クエリ ID を取得するには、次に示すように、MariaDB の [情報スキーマ 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>

次の例では、230040 のクエリ ID を持つクエリを終了します。

```
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
+-----------+
```

**注記**  
 一時テーブルスペースのサイズと現在のワークロードによっては、縮小オペレーションに時間がかかる場合があります。

**重要**  
一時テーブルスペースは、そのサイズに寄与したすべての一時テーブルが使用されなくなった場合にのみ縮小されます。インスタンスにアクティブな一時テーブルスペースがない場合は、この手順を実行することをお勧めします。