

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Amazon RDS 上的 MariaDB SQL 參考
<a name="Appendix.MariaDB.SQLRef"></a>

在下文中，您可以找到說明執行 MariaDB 資料庫引擎的 Amazon RDS 執行個體所適用系統預存程序的描述。

您可以使用 MySQL 資料庫執行個體和 MariaDB 資料庫執行個體可用的系統預存程序。[RDS for MySQL 預存程序參考](Appendix.MySQL.SQLRef.md) 中記載這些預存程序。MariaDB 資料庫執行個體支援 `mysql.rds_start_replication_until` 和 `mysql.rds_start_replication_until_gtid` 以外的所有預存程序。

此外，僅對執行 MariaDB 的 Amazon RDS 資料庫執行個體支援下列系統預存程序：
+ [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 資料庫執行個體支援此程序。

此程序相當於 `SHOW REPLICA STATUS` 命令。MariaDB 10.5 版本和更新版本的資料庫執行個體不支援此命令。

在 MariaDB 的先前版本中，此相當的 `SHOW SLAVE STATUS` 命令需要 `REPLICATION SLAVE` 權限。在 MariaDB 10.5 及更高版本中，其需要 `REPLICATION REPLICA ADMIN` 權限。為了保護 MariaDB 10.5 及更高版本的資料庫執行個體的 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 資料庫執行個體的 GTID 型複寫。僅在外部 MariaDB 執行個體的版本為 10.0.24 或更高版本時，才支援此存放程序。設定其中的一或兩個執行個體不支援 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 可提供二進位日誌複寫未提供的損毀安全功能，因此建議您在複寫執行個體支援時加以使用。

## 語法
<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 資料庫執行個體中具有 `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` 程序必須由主要使用者執行。其必須在 MariaDB 資料庫執行個體上執行，您會將該執行個體設定為在 Amazon RDS 外部執行之 MariaDB 執行個體的複本。在執行 `mysql.rds_set_external_master_gtid` 之前，您必須在將 Amazon RDS 外部執行的 MariaDB 的執行個體設定為來源執行個體。如需更多詳細資訊，請參閱 [將資料匯入 Amazon RDS for MariaDB 資料庫執行個體](MariaDB.Procedural.Importing.md)。

**警告**  
請勿使用 `mysql.rds_set_external_master_gtid` 來管理兩個 Amazon RDS 資料庫執行個體之間的複寫。只有在使用在 RDS 外部執行的 MariaDB 執行個體進行複寫時才使用它。如需 Amazon RDS 資料庫執行個體之間管理複寫的相關資訊，請參閱[使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

呼叫 `mysql.rds_set_external_master_gtid` 將 Amazon RDS 資料庫執行個體設定為僅供讀取複本之後，您可以呼叫複本上的 [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 資料庫執行個體上執行時，下列範例會將它設定為在 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>

下列範例會結束查詢 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 資料庫執行個體才支援此程序。

在執行期間，二進位記錄會暫時停用，以防止這些管理命令遭到複寫。

此程序會將所有操作記錄在 [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
+-----------+
```

**注意**  
 縮減操作可能需要一些時間，具體取決於暫存資料表空間大小和目前的工作負載。

**重要**  
只有在所有佔用大小的暫存資料表不再使用時，暫存資料表空間才會縮減。建議您在執行個體上沒有作用中暫存資料表空間時執行此程序。