

# Amazon RDS for MariaDB
<a name="CHAP_MariaDB"></a>

Amazon RDS 支持若干版本 MariaDB 的数据库实例。有关支持的版本的完整信息，请参阅 [Amazon RDS 上的 MariaDB 版本](MariaDB.Concepts.VersionMgmt.md)。

要创建 MariaDB 数据库实例，请使用 Amazon RDS 管理工具或界面。然后，您可以使用 Amazon RDS 工具对数据库实例执行管理操作。这些操作包括如下各项：
+ 重新配置数据库实例或调整其大小
+ 授权到数据库实例的连接 
+ 从备份或快照中创建和还原
+ 创建多可用区辅助实例
+ 创建只读副本
+ 监控数据库实例的性能

要存储和访问数据库实例中的数据，请使用标准 MariaDB 实用程序和应用程序。

MariaDB 在所有 AWS 区域中都可用。有关 AWS 区域的更多信息，请参阅[区域、可用区和 Local Zones ](Concepts.RegionsAndAvailabilityZones.md)。

您可以使用 Amazon RDS for MariaDB 数据库来构建符合 HIPAA 标准的应用程序。您可以在与 AWS 签订的业务合作协议 (BAA) 下存储与医疗保健相关的信息，包括受保护医疗信息 (PHI)。有关更多信息，请参阅 [HIPAA 合规性](https://aws.amazon.com/compliance/hipaa-compliance/)。AWS范围内的服务已由第三方审核员完全评估，由此获得了证书、合规性证明或操作授权书（ATO）。有关更多信息，请参阅[合规性计划范围内的AWS服务](https://aws.amazon.com/compliance/services-in-scope/)。

在创建数据库实例之前，完成[设置 Amazon RDS 环境](CHAP_SettingUp.md) 中的步骤。创建数据库实例时，RDS 主用户将获得 DBA 权限，但有一些限制。此账户用于管理任务，如创建其他数据库账户。

您可执行以下操作：
+ 数据库实例
+ 数据库快照
+ 时间点恢复
+ 自动备份
+ 手动备份

您可以在基于 Amazon VPC 的虚拟私有云 (VPC) 中使用运行 MariaDB 的数据库实例。您还可以通过启用各种选项向 MariaDB 数据库实例添加特征。Amazon RDS 支持对 MariaDB 的多可用区部署，这是一种高可用性失效转移解决方案。

**重要**  
为了提供托管服务体验，Amazon RDS 未提供数据库实例的 Shell 访问权限。并且还限制了对需要高级权限的某些系统程序和表的访问。您可以使用标准 SQL 客户端（例如 mysql 客户端）访问您的数据库。但是，您无法使用远程登录或安全外壳 (SSH) 直接访问主机。

**Topics**
+ [Amazon RDS 上的 MariaDB 特征支持](MariaDB.Concepts.FeatureSupport.md)
+ [Amazon RDS 上的 MariaDB 版本](MariaDB.Concepts.VersionMgmt.md)
+ [连接到 MariaDB 数据库实例](USER_ConnectToMariaDBInstance.md)
+ [保护 MariaDB 数据库实例连接安全](securing-mariadb-connections.md)
+ [使用 Amazon RDS 优化读取提高 RDS for MariaDB 的查询性能](rds-optimized-reads-mariadb.md)
+ [使用适用于 MariaDB 的 Amazon RDS 优化型写入功能提高写入性能](rds-optimized-writes-mariadb.md)
+ [升级 MariaDB 数据库引擎](USER_UpgradeDBInstance.MariaDB.md)
+ [升级 MariaDB 数据库快照引擎版本](mariadb-upgrade-snapshot.md)
+ [将数据导入到 Amazon RDS for MariaDB 数据库实例](MariaDB.Procedural.Importing.md)
+ [在 Amazon RDS 中使用 MariaDB 复制](USER_MariaDB.Replication.md)
+ [适用于 MariaDB 数据库引擎的选项](Appendix.MariaDB.Options.md)
+ [MariaDB 的参数](Appendix.MariaDB.Parameters.md)
+ [将数据从 MySQL 数据库快照迁移到 MariaDB 数据库实例](USER_Migrate_MariaDB.md)
+ [Amazon RDS SQL 上的 MariaDB 参考](Appendix.MariaDB.SQLRef.md)
+ [MariaDB 数据库实例的本地时区](MariaDB.Concepts.LocalTimeZone.md)
+ [RDS for MariaDB 的已知问题和限制](CHAP_MariaDB.Limitations.md)

# Amazon RDS 上的 MariaDB 特征支持
<a name="MariaDB.Concepts.FeatureSupport"></a>

RDS for MariaDB 支持 MariaDB 的大部分特征和功能。有些功能可能仅提供有限支持或受限制的权限。

您可以在[数据库的新增功能？](https://aws.amazon.com/about-aws/whats-new/database/)页面上筛选新的 Amazon RDS 特征。对于 **Products (产品)**，请选择 **Amazon RDS**。然后使用 **MariaDB 2023** 之类的关键词进行搜索。

**注意**  
以下列表并不详尽。

有关 Amazon RDS 上 MariaDB 功能支持的更多信息，请参阅以下主题。

**主题**
+ [Amazon RDS 上的 MariaDB 支持的存储引擎](MariaDB.Concepts.Storage.md)
+ [Amazon RDS 上的 MariaDB 的缓存预热](MariaDB.Concepts.XtraDBCacheWarming.md)
+ [Amazon RDS 不支持的 MariaDB 特征](MariaDB.Concepts.FeatureNonSupport.md)

## Amazon RDS for MariaDB 各主要版本上的 MariaDB 特征支持
<a name="MariaDB.Concepts.FeatureSupport.MajorVersions"></a>

在以下几部分，查找有关 Amazon RDS for MariaDB 各主要版本上的 MariaDB 特征支持的信息：

**Topics**
+ [Amazon RDS 上对 MariaDB 11.8 的支持](#MariaDB.Concepts.FeatureSupport.11-8)
+ [Amazon RDS 上对 MariaDB 11.4 的支持](#MariaDB.Concepts.FeatureSupport.11-4)
+ [Amazon RDS 上对 MariaDB 10.11 的支持](#MariaDB.Concepts.FeatureSupport.10-11)
+ [Amazon RDS 对 MariaDB 10.6 的支持](#MariaDB.Concepts.FeatureSupport.10-6)
+ [Amazon RDS 对 MariaDB 10.5 的支持](#MariaDB.Concepts.FeatureSupport.10-5)
+ [Amazon RDS 上对 MariaDB 10.4 的支持](#MariaDB.Concepts.FeatureSupport.10-4)

有关支持的 Amazon RDS for MariaDB 次要版本的信息，请参阅 [Amazon RDS 上的 MariaDB 版本](MariaDB.Concepts.VersionMgmt.md)。

### Amazon RDS 上对 MariaDB 11.8 的支持
<a name="MariaDB.Concepts.FeatureSupport.11-8"></a>

对于运行 MariaDB 版本 11.8 或更高版本的数据库实例，Amazon RDS 支持以下新特征。

**注意**  
在 MariaDB 11.8 中，`require_secure_transport` 的默认值现为 `1`，需要安全的 SSL/TLS 连接。如果需要非安全连接，则设置为 `0`。
+ **参数的新默认值** – `require_secure_transport` 参数的默认值从 `0` 更改为 `1`，默认情况下强制使用安全传输连接。有关更多信息，请参阅 [所有与 Amazon RDS 上的 MariaDB 数据库实例的连接都需要 SSL/TLS](mariadb-ssl-connections.require-ssl.md)。
+ **矢量支持** – 您可以使用 MariaDB Vector 直接在 MariaDB 中存储和搜索人工智能生成的向量。此功能引入了以下系统变量：
  + 变量 [https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-system-variables#mhnsw_default_distance](https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-system-variables#mhnsw_default_distance) 指定 MHNSW 向量索引的默认距离指标。
  + 变量 [https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-system-variables#mhnsw_default_m](https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-system-variables#mhnsw_default_m) 定义了 MHNSW 向量索引中 `M` 参数的默认值。
  + 变量 [https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-system-variables#mhnsw_ef_search](https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-system-variables#mhnsw_ef_search) 定义了向量索引搜索的候选结果的最少数量。
  + 变量 [https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-system-variables#mhnsw_max_cache_size](https://mariadb.com/docs/server/reference/sql-structure/vectors/vector-system-variables#mhnsw_max_cache_size) 设置一个 MHNSW 向量索引缓存的上限。
+ **临时文件大小限制** – 现在，您可以使用 RDS Maria DB 11.8 参数组中提供的两个系统变量来限制已创建的磁盘临时文件和表的大小：
  + 变量 [https://mariadb.com/docs/server/security/limiting-size-of-created-disk-temporary-files-and-tables/max_tmp_session_space_usage-system-variable](https://mariadb.com/docs/server/security/limiting-size-of-created-disk-temporary-files-and-tables/max_tmp_session_space_usage-system-variable) 用于限制每个用户的临时空间限额。
  + 变量 [https://mariadb.com/docs/server/security/limiting-size-of-created-disk-temporary-files-and-tables/max_tmp_total_space_usage-system-variable](https://mariadb.com/docs/server/security/limiting-size-of-created-disk-temporary-files-and-tables/max_tmp_total_space_usage-system-variable) 用于限制所有用户的临时空间限额。
+ **临时表空间管理**：临时表空间存储临时表，并随着数据的添加而增长。删除临时表时，不会自动回收空间。您可以使用 [mysql.rds\$1execute\$1operation](mysql_rds_execute_operation.md) 过程缩减临时表空间并回收磁盘空间。

有关所有 MariaDB 11.8 特征的列表及其文档，请参阅 MariaDB 网站上的 [MariaDB 11.8 中的更改和改进](https://mariadb.com/kb/en/changes-improvements-in-mariadb-11-8/)和[发行说明 - MariaDB 11.8 系列](https://mariadb.com/kb/en/release-notes-mariadb-11-8-series/)。

有关不支持特征的列表，请参阅 [Amazon RDS 不支持的 MariaDB 特征](MariaDB.Concepts.FeatureNonSupport.md)。

### Amazon RDS 上对 MariaDB 11.4 的支持
<a name="MariaDB.Concepts.FeatureSupport.11-4"></a>

对于运行 MariaDB 版本 11.4 或更高版本的数据库实例，Amazon RDS 支持以下新特征。
+ **密码库** – RDS for MariaDB 将 OpenSSL 替换为已获得 FIPS 140-3 认证的 AWS Libcrypto（AWS-LC）。
+ **简单密码检查插件** – 您可以使用 MariaDB [简单密码检查插件](https://mariadb.com/kb/en/simple-password-check-plugin/)来检查密码是否包含至少特定数量的特定类型字符。有关更多信息，请参阅 [对于 RDS for MariaDB 使用密码验证插件](MariaDB.Concepts.PasswordValidationPlugins.md)。
+ **Cracklib 密码检查插件** – 您可以使用 MariaDB [Cracklib 密码检查插件](https://mariadb.com/kb/en/cracklib-password-check-plugin/)来检查新密码的强度。有关更多信息，请参阅 [对于 RDS for MariaDB 使用密码验证插件](MariaDB.Concepts.PasswordValidationPlugins.md)。
+ **InnoDB 增强功能** – 这些增强功能包括以下项目：
  + 更改缓冲区已删除。有关更多信息，请参阅 [InnoDB 更改缓冲](https://mariadb.com/kb/en/innodb-change-buffering/)。
  + InnoDB 碎片整理已删除。有关更多信息，请参阅 [InnoDB 碎片整理](https://mariadb.com/kb/en/defragmenting-innodb-tablespaces/#innodb-defragmentation)。
+ **新权限** – 管理员用户现在也拥有 `SHOW CREATE ROUTINE` 权限。此权限允许被授权者查看其他用户拥有的例程的 `SHOW CREATE` 定义语句。有关更多信息，请参阅[数据库权限](https://mariadb.com/kb/en/grant/#database-privileges)。
+ **复制改进** – MariaDB 版本 11.4 数据库实例支持二进制日志索引。您可以为每个二进制日志文件创建 GTID 索引。这些索引缩短了查找 GTID 所需的时间，从而提高了复制性能。有关更多信息，请参阅[二进制日志索引](https://mariadb.com/kb/en/gtid/#binlog-indexing)。
+ **已弃用或删除的参数** – 对于 MariaDB 版本 11.4 数据库实例，以下参数已弃用或删除：
  + 已从 [optimizer\$1switch](https://mariadb.com/kb/en/optimizer-switch/) 中删除 `engine_condition_pushdown`
  + [innodb\$1change\$1buffer\$1max\$1size](https://mariadb.com/kb/en/innodb-system-variables/#innodb_change_buffer_max_size)
  + [innodb\$1defragment](https://mariadb.com/kb/en/innodb-system-variables/#innodb_defragment)
  + 已从 [tls\$1version](https://mariadb.com/kb/en/ssltls-system-variables/#tls_version) 中删除 `TLSv1.0` 和 `TLSv1.1`
+ **参数的新默认值** – [innodb\$1undo\$1tablespaces](https://mariadb.com/kb/en/innodb-system-variables/#innodb_undo_tablespaces) 参数的默认值从 `0` 更改为 `3`。
+ **参数的新有效值** – 对于 MariaDB 版本 11.4 数据库实例，以下参数具有新的有效值：
  + [binlog\$1row\$1image](https://mariadb.com/kb/en/replication-and-binary-log-system-variables/#binlog_row_image) 参数的有效值现在包括 `FULL_NODUP`。
  + [OLD\$1MODE](https://mariadb.com/kb/en/old-mode/) 参数的有效值现在包括 `NO_NULL_COLLATION_IDS`。
+ **新参数** – 对于 MariaDB 版本 11.4 数据库实例，以下参数是新的：
  + [transaction\$1isolation](https://mariadb.com/kb/en/server-system-variables/#transaction_isolation) 参数替换 [tx\$1isolation](https://mariadb.com/kb/en/server-system-variables/#tx_isolation) 参数。
  + [transaction\$1read\$1only](https://mariadb.com/kb/en/server-system-variables/#transaction_read_only) 参数替换 [tx\$1read\$1only](https://mariadb.com/kb/en/server-system-variables/#tx_read_only) 参数。
  + [block\$1encryption\$1mode](https://mariadb.com/kb/en/server-system-variables/#block_encryption_mode) 参数定义了 [AES\$1ENCRYPT()](https://mariadb.com/kb/en/aes_encrypt/) 和 [AES\$1DECRYPT()](https://mariadb.com/kb/en/aes_decrypt/) 函数的默认区块加密模式。
  + [character\$1set\$1collations](https://mariadb.com/kb/en/server-system-variables/#character_set_collations) 定义了字符集默认排序规则的覆盖。
  + [binlog\$1gtid\$1index](https://mariadb.com/kb/en/system-versioned-tables/#binlog_gtid_index)、[binlog\$1gtid\$1index\$1page\$1size](https://mariadb.com/kb/en/system-versioned-tables/#binlog_gtid_index_page_size) 和 [binlog\$1gtid\$1index\$1span\$1min](https://mariadb.com/kb/en/system-versioned-tables/#binlog_gtid_index_span_min) 定义了二进制日志 GTID 索引的属性。有关更多信息，请参阅[二进制日志索引](https://mariadb.com/kb/en/gtid/#binlog-indexing)。

有关所有 MariaDB 11.4 特征的列表及其文档，请参阅 MariaDB 网站上的 [MariaDB 11.4 中的更改和改进](https://mariadb.com/kb/en/changes-improvements-in-mariadb-11-4/)和[发行说明 - MariaDB 11.4 系列](https://mariadb.com/kb/en/release-notes-mariadb-11-4-series/)。

有关不支持特征的列表，请参阅 [Amazon RDS 不支持的 MariaDB 特征](MariaDB.Concepts.FeatureNonSupport.md)。

### Amazon RDS 上对 MariaDB 10.11 的支持
<a name="MariaDB.Concepts.FeatureSupport.10-11"></a>

对于运行 MariaDB 版本 10.11 或更高版本的数据库实例，Amazon RDS 支持以下新特征。
+ **密码重用检查插件** – 您可以使用 MariaDB 密码重用检查插件来防止用户重用密码并设置密码的保留期。有关更多信息，请参阅[密码重用检查插件](https://mariadb.com/kb/en/password-reuse-check-plugin/)。
+ **GRANT TO PUBLIC 授权** – 您可以向所有具有服务器访问权限的用户授予权限。有关更多信息，请参阅 [GRANT TO PUBLIC](https://mariadb.com/kb/en/grant/#to-public)。
+ **SUPER 和 READ ONLY ADMIN 权限分离** – 您可以删除所有用户的 READ ONLY ADMIN 权限，即使是以前拥有 SUPER 权限的用户也是如此。
+ **安全** – 现在可以将选项 `--ssl` 设置为 MariaDB 客户端的默认设置。如果配置不正确，MariaDB 不再以静默方式禁用 SSL。
+ **SQL 命令和函数** – 您现在可以使用 `SHOW ANALYZE FORMAT=JSON` 命令和函数 `ROW_NUMBER`、`SFORMAT` 以及 `RANDOM_BYTES`。`SFORMAT` 允许字符串格式化，且默认情况下处于启用状态。只需一条命令即可将分区转换为表和将表转换为分区。围绕 `JSON_*()` 函数还有一些改进。在 10.10 及更高版本中，已弃用 `DES_ENCRYPT` 和 `DES_DECRYPT` 函数。有关更多信息，请参阅 [SFORMAT](https://mariadb.com/kb/en/sformat/)。
+ **InnoDB 增强功能** – 这些增强功能包括以下项目：
  + 重做日志的性能改进，以减少写入放大并提高并发性。
  + 无需重新初始化数据目录，即可更改撤消表空间。此增强功能减少了控制面板开销。它要求重启，但在更改撤消表空间后不需要重新初始化。
  + 支持 `CHECK TABLE … EXTENDED` 和内部索引降序。
  + 改进了批量插入功能。
+ **二进制日志更改** – 这些更改包括以下项目：
  + 分两个阶段记录 `ALTER` 以减少复制延迟。默认情况下，`binlog_alter_two_phase` 参数处于禁用状态，但可以通过参数组启用。
  + 记录 `explicit_defaults_for_timestamp`。
  + 如果事务可以安全地回滚，则不再记录 `INCIDENT_EVENT`。
+ **复制****改进** – 如果主服务器支持 GTID 复制，则 MariaDB 版本 10.11 数据库实例默认情况下使用此功能。另外，`Seconds_Behind_Master` 更精确。
+ **客户端** – 您可以将新的命令行选项用于 `mysqlbinglog` 和 `mariadb-dump`。您可以使用 `mariadb-dump` 转储和还原历史数据。
+ **系统版本控制** – 您可以修改历史记录。MariaDB 会自动创建新的分区。
+ **原子 DDL** – `CREATE OR REPLACE` 现在是原子的。语句要么成功，要么完全相反。
+ **重做日志写入** – 重做日志异步写入。
+ **存储函数** – 存储函数现在支持存储过程中的相同 `IN`、`OUT` 和 `INOUT` 参数。
+ **已弃用或移除的参数** – 对于 MariaDB 版本 10.11 数据库实例，以下参数已弃用或删除：
  + [innodb\$1change\$1buffering](https://mariadb.com/kb/en/innodb-system-variables/#innodb_change_buffering)
  + [innodb\$1disallow\$1writes](https://mariadb.com/kb/en/innodb-system-variables/#innodb_disallow_writes)
  + [innodb\$1log\$1write\$1ahead\$1size](https://mariadb.com/kb/en/innodb-system-variables/#innodb_log_write_ahead_size) 
  + [ innodb\$1prefix\$1index\$1cluster\$1optimization](https://mariadb.com/kb/en/innodb-system-variables/#innodb_prefix_index_cluster_optimization)
  + [ keep\$1files\$1on\$1create](https://mariadb.com/kb/en/server-system-variables/#keep_files_on_create)
  + [old](https://mariadb.com/kb/en/server-system-variables/#old)
+ **动态参数** – 对于 MariaDB 版本 10.11 数据库实例，以下参数现在是动态的：
  + [innodb\$1log\$1file\$1size](https://mariadb.com/kb/en/innodb-system-variables/#innodb_log_file_size)
  + [innodb\$1write\$1io\$1threads](https://mariadb.com/kb/en/innodb-system-variables/#innodb_write_io_threads)
  + [innodb\$1read\$1io\$1threads](https://mariadb.com/kb/en/innodb-system-variables/#innodb_read_io_threads)
+ **参数的新默认值** – 对于 MariaDB 版本 10.11 数据库实例，以下参数具有新的默认值：
  + [explicit\$1defaults\$1for\$1timestamp](https://mariadb.com/kb/en/server-system-variables/#explicit_defaults_for_timestamp) 参数的默认值已从 `OFF` 更改为 `ON`。
  + [optimizer\$1prune\$1level](https://mariadb.com/kb/en/server-system-variables/#optimizer_prune_level) 参数的默认值已从 `1` 更改为 `2`。
+ **参数的新有效值** – 对于 MariaDB 版本 10.11 数据库实例，以下参数具有新的有效值：
  + [old](https://mariadb.com/kb/en/server-system-variables/#old) 参数的有效值已合并到 [old\$1mode](https://mariadb.com/kb/en/server-system-variables/#old_mode) 参数的有效值中。
  + [histogram\$1type](https://mariadb.com/kb/en/server-system-variables/#histogram_type) 参数的有效值现在包括 `JSON_HB`。
  + [innodb\$1log\$1buffer\$1size](https://mariadb.com/kb/en/innodb-system-variables/#innodb_log_buffer_size) 参数的有效值范围现在为 `262144` 至 `4294967295`（256KB 至 4096MB）。
  + [innodb\$1log\$1file\$1size](https://mariadb.com/kb/en/innodb-system-variables/#innodb_log_file_size) 参数的有效值范围现在为 `4194304` 至 `512GB`（4MB 至 512GB）。
  + [optimizer\$1prune\$1level](https://mariadb.com/kb/en/server-system-variables/#optimizer_prune_level) 参数的有效值现在包括 `2`。
+ **新参数** – 对于 MariaDB 版本 10.11 数据库实例，以下参数是新的：
  + [binlog\$1alter\$1two\$1phase](https://mariadb.com/kb/en/replication-and-binary-log-system-variables//#binlog_alter_two_phase) 参数可以改善复制性能。
  + [log\$1slow\$1min\$1examined\$1row\$1limit](https://mariadb.com/kb/en/server-system-variables/#log_slow_min_examined_row_limit) 参数可以改善性能。
  + [log\$1slow\$1query](https://mariadb.com/kb/en/server-system-variables/#log_slow_query) 参数和 [log\$1slow\$1query\$1file](https://mariadb.com/kb/en/server-system-variables/#log_slow_query_file) 参数分别为 `slow_query_log` 和 `slow_query_log_file` 的别名。
  +  [optimizer\$1extra\$1pruning\$1depth](https://mariadb.com/kb/en/server-system-variables/#optimizer_extra_pruning_depth)
  + [system\$1versioning\$1insert\$1history](https://mariadb.com/kb/en/system-versioned-tables/#system_versioning_insert_history)

有关所有 MariaDB 10.11 特征的列表及其文档，请参阅 MariaDB 网站上的 [MariaDB 10.11 中的更改和改进](https://mariadb.com/kb/en/changes-improvements-in-mariadb-1011/)和[发行说明 - MariaDB 10.11 系列](https://mariadb.com/kb/en/release-notes-mariadb-1011-series/)。

有关不支持特征的列表，请参阅 [Amazon RDS 不支持的 MariaDB 特征](MariaDB.Concepts.FeatureNonSupport.md)。

### Amazon RDS 对 MariaDB 10.6 的支持
<a name="MariaDB.Concepts.FeatureSupport.10-6"></a>

对于运行 MariaDB 版本 10.6 或更高版本的数据库实例，Amazon RDS 支持以下新特征：
+ **MyRocks 存储引擎** - 您可以将 MyRocks 存储引擎与 RDS for MariaDB 结合使用，以优化写入密集型高性能 Web 应用程序的存储消耗。有关更多信息，请参阅 [Amazon RDS 上的 MariaDB 支持的存储引擎](MariaDB.Concepts.Storage.md) 和 [MyRocks](https://mariadb.com/kb/en/myrocks/)。
+ **AWS Identity and Access Management (IAM) 数据库身份验证** - 您可以使用 IAM 数据库身份验证来提高安全性和集中管理与 MariaDB 数据库实例的连接。有关更多信息，请参阅 [适用于 MariaDB、MySQL 和 PostgreSQL 的IAM 数据库身份验证](UsingWithRDS.IAMDBAuth.md)。
+ **升级选项** - 您现在可以从以前的任何主要版本（10.3、10.4、10.5）升级到 RDS for MariaDB 版本 10.6。您还可以将现有 MySQL 5.6 或 5.7 数据库实例的快照还原到 MariaDB 10.6 实例。有关更多信息，请参阅 [升级 MariaDB 数据库引擎](USER_UpgradeDBInstance.MariaDB.md)。
+ **延迟复制** - 您现在可以设置一个只读副本落后于源数据库的可配置时间段。在标准 MariaDB 复制配置中，源和副本之间的复制延迟最小。使用延迟复制时，您可以将故意延迟设置为灾难恢复策略。有关更多信息，请参阅 [使用 MariaDB 配置延迟复制](USER_MariaDB.Replication.ReadReplicas.DelayReplication.md)。
+ **Oracle PL/SQL 兼容性** - 通过使用 RDS for MariaDB 版本 10.6，您可以更轻松地将旧版 Oracle 应用程序迁移到 Amazon RDS。有关更多信息，请参阅 [SQL\$1MODE=ORACLE](https://mariadb.com/kb/en/sql_modeoracle/)。
+ **原子 DDL** - 您的动态数据语言 (DDL) 语句与 RDS for MariaDB 版本 10.6 结合使用可能相对安全。`CREATE TABLE`、`ALTER TABLE`、`RENAME TABLE`、`DROP TABLE`、`DROP DATABASE` 和相关的 DDL 语句现在是原子的。要么语句成功，要么完全相反。有关更多信息，请参阅[原子 DDL](https://mariadb.com/kb/en/atomic-ddl/)。
+ **其他增强功能** - 这些增强功能包括在 SQL 中将 JSON 数据转换为关系格式的 `JSON_TABLE` 功能，以及使用 Innodb 更快地加载空表数据。它们还包括用于分析和故障排除的新 `sys_schema`，用于忽略未使用索引的优化器增强以及性能改进。有关更多信息，请参阅 [JSON\$1TABLE](https://mariadb.com/kb/en/json_table/)。
+ **参数的新默认值** – 对于 MariaDB 10.6 版本数据库实例，以下参数具有新的默认值：
  + 以下参数的默认值已从 `utf8` 更改为 `utf8mb3`：
    + [character\$1set\$1client](https://mariadb.com/kb/en/server-system-variables/#character_set_client)
    + [character\$1set\$1connection](https://mariadb.com/kb/en/server-system-variables/#character_set_connection)
    + [character\$1set\$1results](https://mariadb.com/kb/en/server-system-variables/#character_set_results)
    + [character\$1set\$1system](https://mariadb.com/kb/en/server-system-variables/#character_set_system)

    尽管这些参数的默认值已更改，但功能没有变化。有关更多信息，请参阅 MariaDB 文档中的[支持的字符集和排序规则](https://mariadb.com/kb/en/supported-character-sets-and-collations/)。
  + [collation\$1connection](https://mariadb.com/kb/en/server-system-variables/#collation_connection) 参数的默认值已从 `utf8_general_ci` 更改为 `utf8mb3_general_ci`。尽管此参数的默认值已更改，但功能没有变化。
  + [old\$1mode](https://mariadb.com/kb/en/server-system-variables/#old_mode) 参数的默认值已从未设置更改为 `UTF8_IS_UTF8MB3`。尽管此参数的默认值已更改，但功能没有变化。

有关所有 MariaDB 10.6 特征的列表及其文档，请参阅 MariaDB 网站上的 [MariaDB 10.6 中的更改和改进](https://mariadb.com/kb/en/changes-improvements-in-mariadb-106/)和[发行说明 - MariaDB 10.6 系列](https://mariadb.com/kb/en/release-notes-mariadb-106-series/)。

有关不支持特征的列表，请参阅 [Amazon RDS 不支持的 MariaDB 特征](MariaDB.Concepts.FeatureNonSupport.md)。

### Amazon RDS 对 MariaDB 10.5 的支持
<a name="MariaDB.Concepts.FeatureSupport.10-5"></a>

对于运行 MariaDB 版本 10.5 或更高版本的数据库实例，Amazon RDS 支持以下新特征：
+ **InnoDB 增强功能** – MariaDB 10.5 版本包括 InnoDB 增强功能。有关更多信息，请参阅 MariaDB 文档中的 [InnoDB：性能改进等](https://mariadb.com/kb/en/changes-improvements-in-mariadb-105/#innodb-performance-improvements-etc)。
+ **Performance Schema 更新** – MariaDB 10.5 版本包括 Performance Schema 更新。有关更多信息，请参阅 MariaDB 文档中的 [Performance Schema 更新以满足 MySQL 5.7 工具和表的要求](https://mariadb.com/kb/en/changes-improvements-in-mariadb-105/#performance-schema-updates-to-match-mysql-57-instrumentation-and-tables)。
+ **InnoDB 重做日志中的一个文件** – 在 10.5 之前的 MariaDB 版本中，`innodb_log_files_in_group` 参数的值设置为 `2`。在 MariaDB 10.5 版本中，此参数的值设置为 `1`。

  如果从之前的版本升级到 MariaDB 10.5 版本，而且未修改参数，则 `innodb_log_file_size` 参数值不变。但是，它适用于一个日志文件而非两个。因此，升级后的 MariaDB 10.5 版本数据库实例使用的重做日志大小是升级前所用大小的一半。此变化可能会对性能产生明显的影响。要解决此问题，您可以将 `innodb_log_file_size` 参数的值增大两倍。有关修改参数的信息，请参阅 [在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。
+ **SHOW SLAVE STATUS 命令不受支持** – 在 10.5 之前的 MariaDB 版本中，`SHOW SLAVE STATUS` 命令需要 `REPLICATION SLAVE` 特权。在 MariaDB 10.5 版本中，等效的 `SHOW REPLICA STATUS` 命令需要 `REPLICATION REPLICA ADMIN` 特权。此新权限不会向 RDS 主用户授予。

  请不要使用 `SHOW REPLICA STATUS` 命令，而是运行新的 `mysql.rds_replica_status` 存储过程以返回类似信息。有关更多信息，请参阅“[mysql.rds\$1replica\$1status](mysql_rds_replica_status.md)”。
+ **SHOW RELAYLOG EVENTS 命令不受支持** – 在 10.5 之前的 MariaDB 版本中，`SHOW RELAYLOG EVENTS` 命令需要 `REPLICATION SLAVE` 特权。在 MariaDB 10.5 版本中，此命令需要 `REPLICATION REPLICA ADMIN` 特权。此新权限不会向 RDS 主用户授予。
+ **参数的新默认值** – 对于 MariaDB 10.5 版本数据库实例，以下参数具有新的默认值：
  + [max\$1connections](https://mariadb.com/kb/en/server-system-variables/#max_connections) 参数的默认值已更改为 `LEAST({DBInstanceClassMemory/25165760},12000)`。有关 `LEAST` 参数函数的信息，请参阅 [数据库参数函数](USER_ParamValuesRef.md#USER_ParamFunctions)。
  + [innodb\$1adaptive\$1hash\$1index](https://mariadb.com/kb/en/innodb-system-variables/#innodb_adaptive_hash_index) 参数的默认值已更改为 `OFF` (`0`)。
  + [innodb\$1checksum\$1algorithm](https://mariadb.com/kb/en/innodb-system-variables/#innodb_checksum_algorithm) 参数的默认值已更改为 `full_crc32`。
  + [innodb\$1log\$1file\$1size](https://mariadb.com/kb/en/innodb-system-variables/#innodb_log_file_size) 参数的默认值已更改为 2 GB。

有关所有 MariaDB 10.5 特征的列表及其文档，请参阅 MariaDB 网站上的 [MariaDB 10.5 中的更改和改进](https://mariadb.com/kb/en/changes-improvements-in-mariadb-105/)和[发行说明 - MariaDB 10.5 系列](https://mariadb.com/kb/en/release-notes-mariadb-105-series/)。

有关不支持特征的列表，请参阅 [Amazon RDS 不支持的 MariaDB 特征](MariaDB.Concepts.FeatureNonSupport.md)。

### Amazon RDS 上对 MariaDB 10.4 的支持
<a name="MariaDB.Concepts.FeatureSupport.10-4"></a>

对于运行 MariaDB 版本 10.4 或更高版本的数据库实例，Amazon RDS 支持以下新特征：
+ **用户账户安全增强** – [密码过期](https://mariadb.com/kb/en/user-password-expiry/)和[账户锁定](https://mariadb.com/kb/en/account-locking/)改进
+ **优化程序增强** – [优化程序跟踪特征](https://mariadb.com/kb/en/optimizer-trace-overview/)
+ **InnoDB 增强** – [即时 DROP COLUMN 支持](https://mariadb.com/kb/en/alter-table/#drop-column)以及 `VARCHAR` 和 `ROW_FORMAT=DYNAMIC` 的即时 `ROW_FORMAT=COMPACT` 扩展 
+ **新参数** – 包括 [tcp\$1nodedelay](https://mariadb.com/kb/en/server-system-variables/#tcp_nodelay)、[tls\$1version](https://mariadb.com/kb/en/ssltls-system-variables/#tls_version) 和 [gtid\$1cleanup\$1batch\$1size](https://mariadb.com/kb/en/gtid/#gtid_cleanup_batch_size)

有关所有 MariaDB 10.4 特征的列表及其文档，请参阅 MariaDB 网站上的 [MariaDB 10.4 中的更改和改进](https://mariadb.com/kb/en/library/changes-improvements-in-mariadb-104/)和[发行说明 - MariaDB 10.4 系列](https://mariadb.com/kb/en/library/release-notes-mariadb-104-series/)。

有关不支持特征的列表，请参阅 [Amazon RDS 不支持的 MariaDB 特征](MariaDB.Concepts.FeatureNonSupport.md)。

# Amazon RDS 上的 MariaDB 支持的存储引擎
<a name="MariaDB.Concepts.Storage"></a>

RDS for MariaDB 支持以下存储引擎。

**Topics**
+ [InnoDB 存储引擎](#MariaDB.Concepts.Storage.InnoDB)
+ [MyRocks 存储引擎](#MariaDB.Concepts.Storage.MyRocks)

目前，RDS for MariaDB 不支持其他存储引擎。

## InnoDB 存储引擎
<a name="MariaDB.Concepts.Storage.InnoDB"></a>

尽管 MariaDB 支持功能不同的多种存储引擎，但并非所有引擎都针对恢复和数据耐久性而进行了优化。InnoDB 是 Amazon RDS 上的 MariaDB 数据库实例的推荐存储引擎。Amazon RDS 的时间点还原和快照还原等特征要求使用可恢复的存储引擎，且仅支持 MariaDB 版本的推荐存储引擎。

有关更多信息，请参阅 [InnoDB](https://mariadb.com/kb/en/innodb/)。

## MyRocks 存储引擎
<a name="MariaDB.Concepts.Storage.MyRocks"></a>

MyRocks 存储引擎在 RDS for MariaDB 版本 10.6 及更高版本中提供。在生产数据库中使用 MyRocks 存储引擎之前，我们建议您执行彻底的基准测试和测试，以验证您的使用案例相比 InnoDB 的任何潜在优势。

MariaDB 版本 10.6 的默认参数组包括 MyRocks 参数。有关更多信息，请参阅 [MariaDB 的参数](Appendix.MariaDB.Parameters.md) 和 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

要创建使用 MyRocks 存储引擎的表，请在 `CREATE TABLE` 语句中指定 `ENGINE=RocksDB`。以下示例创建使用 MyRocks 存储引擎的表。

```
CREATE TABLE test (a INT NOT NULL, b CHAR(10)) ENGINE=RocksDB;
```

我们强烈建议您不要运行同时跨 InnoDB 和 MyRocks 表的事务。MariaDB 不保证跨存储引擎事务的 ACID（原子性、一致性、隔离性、持久性）。尽管可以在数据库实例中同时使用 InnoDB 和 MyRocks 表，但我们不建议使用这种方法，除非在从一个存储引擎迁移到另一个存储引擎的过程中。数据库实例中同时存在 InnoDB 和 MyRocks 表时，每个存储引擎都有自己的缓冲池，这可能会导致性能降低。

MyRocks 不支持 `SERIALIZABLE` 隔离或 gap 锁定。因此，通常不能将 MyRocks 与基于语句的复制结合使用。有关更多信息，请参阅 [MyRocks 和复制](https://mariadb.com/kb/en/myrocks-and-replication/)。

目前，您只能修改以下 MyRocks 参数：
+ [https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_block_cache_size](https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_block_cache_size)
+ [https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_bulk_load](https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_bulk_load)
+ [https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_bulk_load_size](https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_bulk_load_size)
+ [https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_deadlock_detect](https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_deadlock_detect)
+ [https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_deadlock_detect_depth](https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_deadlock_detect_depth)
+ [https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_max_latest_deadlocks](https://mariadb.com/kb/en/myrocks-system-variables/#rocksdb_max_latest_deadlocks)

MyRocks 存储引擎和 InnoDB 存储引擎可根据 `rocksdb_block_cache_size` 和 `innodb_buffer_pool_size` 参数的设置争用内存。在某些情况下，您可能只打算在特定数据库实例上使用 MyRocks 存储引擎。如果是这样，我们建议将 `innodb_buffer_pool_size minimal` 参数设置为最小值并将 `rocksdb_block_cache_size` 设置为尽可能高。

您可以使用 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html) 和 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DownloadDBLogFilePortion.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DownloadDBLogFilePortion.html) 操作来访问 MyRocks 日志文件。

有关 MyRocks 的更多信息，请参阅 MariaDB 网站上的 [MyRocks](https://mariadb.com/kb/en/myrocks/)。

# Amazon RDS 上的 MariaDB 的缓存预热
<a name="MariaDB.Concepts.XtraDBCacheWarming"></a>

InnoDB 高速缓存预热可为您的 MariaDB 实例提供性能收益，方式是在数据库实例关闭时保存缓冲池的当前状态，然后在数据库实例启动时从保存的信息重新加载缓冲池。此方法将不再需要缓冲池使用常规数据库进行“预热”，而是预加载具有已知常见查询的页的缓冲池。有关缓存预热的更多信息，请参阅 MariaDB 文档中的[转储和还原缓冲池](http://mariadb.com/kb/en/mariadb/xtradbinnodb-buffer-pool/#dumping-and-restoring-the-buffer-pool)。

默认情况下，在 MariaDB 10.3 和更高版本的数据库实例上启用缓存预热。要启用该功能，请将数据库实例的参数组中的 `innodb_buffer_pool_dump_at_shutdown` 和 `innodb_buffer_pool_load_at_startup` 参数设置为 1。更改参数组中的这些参数值将影响使用该参数组的所有 MariaDB 数据库实例。要为特定 MariaDB 数据库实例启用缓存预热，您可能需要为这些数据库实例创建新的参数组。有关参数组的信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

缓存预热主要为使用标准存储的数据库实例提高性能。如果您使用 PIOPS 存储，则通常看不到显著的性能收益。

**重要**  
如果您的 MariaDB 数据库实例未正常关闭 (例如，在故障转移期间)，则缓冲池状态将不会保存到磁盘。在此情况下，MariaDB 将在重新启动数据库实例时加载任何可用的缓冲池文件。这不会造成任何损害，但还原后的缓冲池可能不会反映缓冲池在重新启动前的最新状态。要确保您拥有启动时可用于预热 缓存的缓冲池的最新状态，建议您定期“按需”转储缓冲池。您可以按需转储或加载缓冲池。  
您可创建事件来定期自动转储缓冲池。例如，以下语句创建一个名为 `periodic_buffer_pool_dump` 的事件，该事件每小时转储一次缓冲池。  

```
1. CREATE EVENT periodic_buffer_pool_dump 
2.    ON SCHEDULE EVERY 1 HOUR 
3.    DO CALL mysql.rds_innodb_buffer_pool_dump_now();
```
有关更多信息，请参阅 MariaDB 文档中的[事件](http://mariadb.com/kb/en/mariadb/stored-programs-and-views-events/)。

## 按需转储和加载缓冲池
<a name="MariaDB.Concepts.XtraDBCacheWarming.OnDemand"></a>

您可以使用以下存储过程按需保存和加载 缓存：
+ 要将缓冲池的当前状态转储到磁盘，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1dump\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_dump_now) 存储过程。
+ 要从磁盘加载缓冲池的已保存状态，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1now](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_now) 存储过程。
+ 要取消正在进行的加载操作，请调用 [mysql.rds\$1innodb\$1buffer\$1pool\$1load\$1abort](mysql-stored-proc-warming.md#mysql_rds_innodb_buffer_pool_load_abort) 存储过程。

# Amazon RDS 不支持的 MariaDB 特征
<a name="MariaDB.Concepts.FeatureNonSupport"></a>

Amazon RDS 上不支持以下 MariaDB 特征：
+ S3 存储引擎
+ 身份验证插件 – GSSAPI
+ 身份验证插件 – Unix Socket
+ AWS Key Management 加密插件
+ 低于 10.6 的 MariaDB 版本的延迟复制
+ InnoDB 和 Aria 的本机 MariaDB 静态加密

  您可以按照 [加密 Amazon RDS 资源](Overview.Encryption.md) 中的说明启用 MariaDB 数据库实例的加密。
+ HandlerSocket
+ 低于 10.6 的 MariaDB 版本的 JSON 表类型
+ MariaDB ColumnStore
+ MariaDB Galera 集群
+ 多源复制
+ 低于 10.6 的 MariaDB 版本的 MyRocks 存储引擎
+ 适用于低于 11.4 的 MariaDB 版本的密码验证插件 `simple_password_check` 和 `cracklib_password_check` 
+ Spider 存储引擎
+ Sphinx 存储引擎
+ TokuDB 存储引擎
+ 存储特定于引擎的对象属性，如 MariaDB 文档中的[引擎定义的新表/字段/索引属性](http://mariadb.com/kb/en/mariadb/engine-defined-new-tablefieldindex-attributes/)中所述
+ 表和表空间加密
+ Hashicorp 密钥管理插件
+ 并行运行两个升级

为了产生托管服务体验，Amazon RDS 不允许通过 shell 访问数据库实例，而仅限访问某些需要高级特权的系统过程和表。Amazon RDS 支持使用任何标准 SQL 客户端应用程序访问数据库实例上的数据库。Amazon RDS 不允许使用 Telnet、安全外壳（SSH）或 Windows 远程桌面连接直接从主机访问数据库实例。

# Amazon RDS 上的 MariaDB 版本
<a name="MariaDB.Concepts.VersionMgmt"></a>

对于 MariaDB，按 X.Y.Z 版本组织版本号。在 Amazon RDS 术语中，X.Y 表示主要版本，Z 是次要版本号。对于 Amazon RDS 实现，如果主要版本号更改，则将版本更改视为重大更改；例如，从版本 10.5 更改为 10.6。如果只有次要版本号发生更改（例如，从版本 10.6.14 更改为 10.6.16），则将版本更改视为次要更改。

**Topics**
+ [Amazon RDS 上支持的 MariaDB 次要版本](#MariaDB.Concepts.VersionMgmt.Supported)
+ [Amazon RDS 上支持的 MariaDB 主要版本](#MariaDB.Concepts.VersionMgmt.ReleaseCalendar)
+ [使用数据库预览环境](#mariadb-working-with-the-database-preview-environment)
+ [数据库预览环境中的 MariaDB 版本 11.7](#mariadb-preview-environment-version-11-7)
+ [Amazon RDS for MariaDB 已弃用的版本](#MariaDB.Concepts.DeprecatedVersions)

## Amazon RDS 上支持的 MariaDB 次要版本
<a name="MariaDB.Concepts.VersionMgmt.Supported"></a>

Amazon RDS 目前支持 MariaDB 的以下次要版本。

**注意**  
只有月份和年份的发布日期均为大概日期，这些日期会在确切日期明确后进行更新。

下表显示了 Amazon RDS 当前支持的 MariaDB 11.8 的次要版本。


| MariaDB 引擎版本 | 社区发布日期 | RDS 发布日期 | RDS 标准支持终止日期 | 
| --- | --- | --- | --- | 
|  11.8.6  | 2026 年 2 月 4 日 |  2026 年 2 月 10 日  |  2027 年 2 月  | 
|  11.8.5  | 2025 年 11 月 14 日 |  2025 年 11 月 20 日  |  2026 年 11 月  | 
|  11.8.3  | 2025 年 8 月 6 日 |  2025 年 8 月 25 日  |  2026 年 9 月  | 

下表显示了 Amazon RDS 当前支持的 MariaDB 11.4 的次要版本。


| MariaDB 引擎版本 | 社区发布日期 | RDS 发布日期 | RDS 标准支持终止日期 | 
| --- | --- | --- | --- | 
|  11.4.10  | 2026 年 2 月 4 日 |  2026 年 2 月 10 日  |  2027 年 2 月  | 
|  11.4.9  | 2025 年 11 月 6 日 |  2025 年 11 月 18 日  |  2026 年 11 月  | 
|  11.4.8  | 2025 年 8 月 6 日 |  2025 年 8 月 13 日  |  2026 年 9 月  | 
|  11.4.7  | 2025 年 5 月 22 日 |  2025 年 6 月 4 日  |  2026 年 9 月  | 
|  11.4.5  | 2025 年 2 月 4 日 |  2025 年 2 月 24 日  |  2026 年 5 月  | 
|  11.4.4  | 2024 年 11 月 1 日 |  2024 年 12 月 20 日  |  2026 年 5 月  | 
|  11.4.3  |  2024 年 8 月 8 日  |  2024 年 10 月 15 日  |  2026 年 5 月  | 

下表显示了 Amazon RDS 当前支持的 MariaDB 10.11 的次要版本。


| MariaDB 引擎版本 | 社区发布日期 | RDS 发布日期 | RDS 标准支持终止日期 | 
| --- | --- | --- | --- | 
|  10.11.16  | 2026 年 2 月 4 日 |  2026 年 2 月 10 日  |  2027 年 2 月  | 
|  10.11.15  | 2025 年 11 月 6 日 | 2025 年 11 月 18 日 |  2026 年 11 月  | 
|  10.11.14  | 2025 年 8 月 6 日 | 2025 年 8 月 13 日 |  2026 年 9 月  | 
|  10.11.13  | 2025 年 5 月 22 日 | 2025 年 6 月 4 日 |  2026 年 9 月  | 
|  10.11.11  | 2025 年 2 月 4 日 | 2025 年 2 月 24 日 |  2026 年 5 月  | 
|  10.11.10  |  2024 年 11 月 1 日  |  2024 年 12 月 20 日  |  2026 年 5 月  | 
|  10.11.9  |  2024 年 8 月 8 日  |  2024 年 9 月 4 日  |  2026 年 5 月  | 

下表显示了 Amazon RDS 当前支持的 MariaDB 10.6 的次要版本。


| MariaDB 引擎版本 | 社区发布日期 | RDS 发布日期 | RDS 标准支持终止日期 | 
| --- | --- | --- | --- | 
|  10.6.25  | 2026 年 2 月 4 日 |  2026 年 2 月 10 日  |  2026 年 7 月  | 
|  10.6.24  |  2025 年 11 月 6 日  |  2025 年 11 月 18 日  |  2026 年 7 月  | 
|  10.6.23  |  2025 年 8 月 6 日  |  2025 年 8 月 13 日  |  2026 年 7 月  | 
|  10.6.22  |  2025 年 5 月 6 日  |  2025 年 5 月 20 日  |  2026 年 7 月  | 
|  10.6.21  |  2025 年 2 月 4 日  |  2025 年 2 月 24 日  |  2026 年 5 月  | 
|  10.6.20  |  2024 年 11 月 1 日  |  2024 年 12 月 20 日  |  2026 年 5 月  | 
|  10.6.19  |  2024 年 8 月 8 日  |  2024 年 9 月 4 日  |  2026 年 5 月  | 

下表显示了 Amazon RDS 当前支持的 MariaDB 10.5 的次要版本。


| MariaDB 引擎版本 | 社区发布日期 | RDS 发布日期 | RDS 标准支持终止日期 | 
| --- | --- | --- | --- | 
|  10.5.29  |  2025 年 5 月 6 日  |  2025 年 5 月 20 日  |  2026 年 6 月  | 
|  10.5.28  |  2025 年 2 月 4 日  |  2025 年 2 月 24 日  |  2026 年 6 月  | 
|  10.5.27  |  2024 年 11 月 1 日  |  2024 年 12 月 20 日  |  2026 年 5 月  | 

在创建新数据库实例时，您可以指定当前支持的任何 MariaDB 版本。您可以指定主要版本（例如，MariaDB 10.5），以及指定主要版本支持的任何次要版本。如果没有指定版本，Amazon RDS 会默认使用支持的版本，通常是最新的版本。如果指定了主要版本但未指定次要版本，Amazon RDS 将默认使用您指定的主要版本的最新版本。要查看受支持版本的列表以及新建数据库实例的默认值，请使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-engine-versions.html) AWS CLI 命令。

例如，要列出 RDS for MariaDB 支持的引擎版本，请运行以下 CLI 命令：

```
aws rds describe-db-engine-versions --engine mariadb --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

默认的 MariaDB 版本可能因 AWS 区域而异。要创建具有特定次要版本的数据库实例，请在数据库实例创建过程中指定次要版本。可以通过运行以下 AWS CLI 命令来确定 AWS 区域的默认次要版本：

```
aws rds describe-db-engine-versions --default-only --engine mariadb --engine-version major_engine_version --region region --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

将 *major\$1engine\$1version* 替换为主要引擎版本，并将 *region* 替换为 AWS 区域。例如，以下 AWS CLI 命令返回 10.5 主要版本和美国西部（俄勒冈州）AWS 区域 (us-west-2) 的默认 MariaDB 次要引擎版本：

```
aws rds describe-db-engine-versions --default-only --engine mariadb --engine-version 10.5 --region us-west-2 --query "*[].{Engine:Engine,EngineVersion:EngineVersion}" --output text
```

### Amazon RDS 上的 MariaDB 次要版本
<a name="MySQL.Concepts.VersionMgmt.Supported.Minor"></a>

**Topics**
+ [MariaDB 11.8.6 版](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.8.6)
+ [MariaDB 版本 11.8.5](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.8.5)
+ [MariaDB 11.8.3 版](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.8.3)
+ [MariaDB 11.4.10 版](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.10)
+ [MariaDB 11.4.9 版](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.9)
+ [MariaDB 版本 11.4.8](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.8)
+ [MariaDB 版本 11.4.7](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.7)
+ [MariaDB 版本 11.4.5](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.5)
+ [MariaDB 版本 11.4.4](#MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.4)
+ [MariaDB 10.11.16 版](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.16)
+ [MariaDB 10.11.15 版](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.15)
+ [MariaDB 版本 10.11.14](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.14)
+ [MariaDB 版本 10.11.13](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.13)
+ [MariaDB 版本 10.11.11](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.11)
+ [MariaDB 版本 10.11.10](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.10)
+ [MariaDB 10.6.25 版](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.25)
+ [MariaDB 10.6.24 版](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.24)
+ [MariaDB 版本 10.6.23](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.23)
+ [MariaDB 版本 10.6.22](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.22)
+ [MariaDB 版本 10.6.21](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.21)
+ [MariaDB 版本 10.6.20](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.20)
+ [MariaDB 版本 10.5.29](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.5.29)
+ [MariaDB 版本 10.5.28](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.5.28)
+ [MariaDB 版本 10.5.27](#MariaDB.Concepts.VersionMgmt.Supported.Minor.10.5.27)

#### MariaDB 11.8.6 版
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.8.6"></a>

MariaDB 版本 11.8.6 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025c`。
+ 修复了可能导致某些 SQL 语句无法记录在审计日志中的问题。

#### MariaDB 版本 11.8.5
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.8.5"></a>

MariaDB 版本 11.8.5 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

#### MariaDB 11.8.3 版
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.8.3"></a>

MariaDB 版本 11.8.3 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ **参数的新默认值** – `require_secure_transport` 参数的默认值从 `0` 更改为 `1`，默认情况下强制使用安全传输连接。有关更多信息，请参阅 [所有与 Amazon RDS 上的 MariaDB 数据库实例的连接都需要 SSL/TLS](mariadb-ssl-connections.require-ssl.md)。

#### MariaDB 11.4.10 版
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.10"></a>

MariaDB 版本 11.4.10 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**
+ 更新了时区信息，使其基于 `tzdata2025c`。
+ 修复了可能导致某些 SQL 语句无法记录在审计日志中的问题。

#### MariaDB 11.4.9 版
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.9"></a>

MariaDB 版本 11.4.9 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

#### MariaDB 版本 11.4.8
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.8"></a>

MariaDB 版本 11.4.8 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

#### MariaDB 版本 11.4.7
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.7"></a>

MariaDB 版本 11.4.7 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025b`。

#### MariaDB 版本 11.4.5
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.5"></a>

MariaDB 版本 11.4.5 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025a`。

#### MariaDB 版本 11.4.4
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.11.4.4"></a>

MariaDB 版本 11.4.4 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 还原了两次导致时间点故障恢复（PITR）失败的 MariaDB 社区更改。有关更多信息，请参阅 [MariaDB Server Jira 问题 MDEV-35528](https://jira.mariadb.org/browse/MDEV-35528)。

#### MariaDB 10.11.16 版
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.16"></a>

MariaDB 版本 10.11.16 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025c`。
+ 修复了可能导致某些 SQL 语句无法记录在审计日志中的问题。

#### MariaDB 10.11.15 版
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.15"></a>

MariaDB 版本 10.11.15 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

#### MariaDB 版本 10.11.14
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.14"></a>

MariaDB 版本 10.11.14 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

#### MariaDB 版本 10.11.13
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.13"></a>

MariaDB 版本 10.11.13 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025b`。

#### MariaDB 版本 10.11.11
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.11"></a>

MariaDB 版本 10.11.11 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025a`。

#### MariaDB 版本 10.11.10
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.11.10"></a>

MariaDB 版本 10.11.10 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 还原了两次导致时间点故障恢复（PITR）失败的 MariaDB 社区更改。有关更多信息，请参阅 [MariaDB Server Jira 问题 MDEV-35528](https://jira.mariadb.org/browse/MDEV-35528)。

#### MariaDB 10.6.25 版
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.25"></a>

MariaDB 版本 10.6.25 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025c`。
+ 修复了可能导致某些 SQL 语句无法记录在审计日志中的问题。

#### MariaDB 10.6.24 版
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.24"></a>

MariaDB 版本 10.6.24 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

#### MariaDB 版本 10.6.23
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.23"></a>

MariaDB 版本 10.6.23 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

#### MariaDB 版本 10.6.22
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.22"></a>

MariaDB 版本 10.6.22 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025b`。

#### MariaDB 版本 10.6.21
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.21"></a>

MariaDB 版本 10.6.21 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025a`。

#### MariaDB 版本 10.6.20
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.6.20"></a>

MariaDB 版本 10.6.20 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 还原了两次导致时间点故障恢复（PITR）失败的 MariaDB 社区更改。有关更多信息，请参阅 [MariaDB Server Jira 问题 MDEV-35528](https://jira.mariadb.org/browse/MDEV-35528)。

#### MariaDB 版本 10.5.29
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.5.29"></a>

MariaDB 版本 10.5.29 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025b`。

#### MariaDB 版本 10.5.28
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.5.28"></a>

MariaDB 版本 10.5.28 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 更新了时区信息，使其基于 `tzdata2025a`。

#### MariaDB 版本 10.5.27
<a name="MariaDB.Concepts.VersionMgmt.Supported.Minor.10.5.27"></a>

MariaDB 版本 10.5.27 现在可在 Amazon RDS 上使用。此版本包含由 MariaDB 社区和 Amazon RDS 添加的修复和改进。

**新功能和增强功能**。
+ 还原了两次导致时间点故障恢复（PITR）失败的 MariaDB 社区更改。有关更多信息，请参阅 [MariaDB Server Jira 问题 MDEV-35528](https://jira.mariadb.org/browse/MDEV-35528)。

## Amazon RDS 上支持的 MariaDB 主要版本
<a name="MariaDB.Concepts.VersionMgmt.ReleaseCalendar"></a>

RDS for MariaDB 主要版本至少会在相应社群版本的社区生命周期终止前保持可用状态。您可以参照下列日期规划您的测试和升级周期。如果 Amazon 对某个 RDS for MariaDB 版本的支持时间比原定时间更长，我们会计划更新此表格以反映较晚的日期。

**注意**  
只有月份和年份的发布日期均为大概日期，这些日期会在确切日期明确后进行更新。  
您还可以运行 [describe-db-major-engine-versions](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-major-engine-versions.html) AWS CLI 命令或者使用 [DescribeDBMajorEngineVersions](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBMajorEngineVersions.html) RDS API 操作，来查看有关主要引擎版本的支持日期的信息。


| MariaDB 主要版本 | 社区发布日期 | RDS 发布日期 | 社区生命周期终止日期 | RDS 标准支持终止日期 | 
| --- | --- | --- | --- | --- | 
|  MariaDB 11.8  |  2025 年 8 月 6 日  |  2025 年 8 月 25 日  |  2030 年 6 月  |  2030 年 6 月  | 
|  MariaDB 11.4  |  2024 年 8 月 8 日  |  2024 年 10 月 15 日  |  2029 年 5 月  |  2029 年 5 月  | 
|  MariaDB 10.11  |  2023 年 2 月 16 日  |  2023 年 8 月 21 日  |  2028 年 2 月 16 日  |  2028 年 2 月  | 
|  MariaDB 10.6  |  2021 年 7 月 6 日  |  2022 年 2 月 3 日  |  2026 年 7 月 6 日  |  2026 年 8 月  | 
|  MariaDB 10.5  |  2020 年 6 月 24 日  |  2021 年 1 月 21 日  |  2025 年 6 月 24 日  |  2026 年 8 月  | 

## 使用数据库预览环境
<a name="mariadb-working-with-the-database-preview-environment"></a>

数据库预览环境中的 RDS for MariaDB 数据库实例在功能上类似于其他 RDS for MariaDB 数据库实例。但是，您不能将数据库预览环境用于生产工作负载。

预览环境具有以下限制：
+ Amazon RDS 会在创建所有数据库实例 60 天之后将其删除，包括其所有备份和快照。
+ 您只能使用通用 SSD 和预置 IOPS SSD 存储。
+ 您无法从 支持 获得数据库实例的帮助。而是可以将您的问题发布到 AWS 托管的问答社群，即 [AWS re:Post](https://repost.aws/tags/TAsibBK6ZeQYihN9as4S_psg/amazon-relational-database-service)。
+ 您无法将数据库实例的快照复制到生产环境。

预览版支持以下选项。
+ 您可以使用 db.m6i、db.r6i、db.m6g、db.m5、db.t3、db.r6g 和 db.r5 数据库实例类创建数据库实例。有关 RDS 实例类的更多信息，请参阅[数据库实例类](Concepts.DBInstanceClass.md)。
+ 您可以同时使用单可用区和多可用区部署。
+ 可以使用标准 MariaDB 转储和加载函数，从数据库预览环境中导出数据库或将数据库导入数据库预览环境。

### 数据库预览环境中不支持的功能
<a name="mariadb-preview-environment-exclusions"></a>

以下功能在预览环境中不可用：
+ 跨区域快照复制
+ 跨区域只读副本
+ RDS 代理

### 在数据库预览环境中创建新数据库实例
<a name="mariadb-create-db-instance-in-preview-environment"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 在数据库预览环境中创建数据库实例。

#### 控制台
<a name="mariadb-create-db-instance-in-preview-environment.CON"></a>

**在数据库预览环境中创建数据库实例**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 从导航窗格选择 **Dashboard (控制面板)**。

1. 在**控制面板**页面中，找到**数据库预览环境**部分，如下图所示。  
![\[Amazon RDS 控制台中具有链接的数据库预览环境部分。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/preview-environment-dashboard.png)

   您可以直接导航到[数据库预览环境](https://us-east-2.console.aws.amazon.com/rds-preview/home?region=us-east-2#)。在继续操作之前，您必须确认并接受这些限制。  
![\[用于确认限制的数据库预览环境服务协议对话框。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/preview-environment-console.png)

1. 要创建 RDS for MariaDB 数据库实例，请遵循与创建任何 Amazon RDS 数据库实例相同的流程。有关更多信息，请参阅[创建数据库实例](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating)中的[控制台](USER_CreateDBInstance.md#USER_CreateDBInstance.CON)过程。

#### AWS CLI
<a name="mariadb-create-db-instance-in-preview-environment.CLI"></a>

要使用 AWS CLI 在数据库预览环境中创建数据库实例，请使用以下端点。

```
rds-preview.us-east-2.amazonaws.com
```

要创建 RDS for MariaDB 数据库实例，请遵循与创建任何 Amazon RDS 数据库实例相同的流程。有关更多信息，请参阅[创建数据库实例](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating)中的[AWS CLI](USER_CreateDBInstance.md#USER_CreateDBInstance.CLI)过程。

#### RDS API
<a name="mariadb-create-db-instance-in-preview-environment.API"></a>

要使用 RDS API 在数据库预览环境中创建数据库实例，请使用以下端点。

```
rds-preview.us-east-2.amazonaws.com
```

要创建 RDS for MariaDB 数据库实例，请遵循与创建任何 Amazon RDS 数据库实例相同的流程。有关更多信息，请参阅[创建数据库实例](USER_CreateDBInstance.md#USER_CreateDBInstance.Creating)中的[RDS API](USER_CreateDBInstance.md#USER_CreateDBInstance.API)过程。

## 数据库预览环境中的 MariaDB 版本 11.7
<a name="mariadb-preview-environment-version-11-7"></a>

MariaDB 版本 11.7 现可在 Amazon RDS 数据库预览环境中使用。MariaDB 版本 11.7 包含一些改进，如 [Changes and improvements in MariaDB 11.7](https://mariadb.com/kb/en/changes-improvements-in-mariadb-11-7/) 中所述。此版本还包括对向量数据类型、索引编制和搜索的支持。有关更多信息，请参阅 MariaDB 文档中的 [Vector Overview](https://mariadb.com/kb/en/vector-overview/)。

在此版本可在所有 AWS 区域中用于生产工作负载之前，可以使用数据库预览环境针对此版本测试您的工作负载。有关数据库预览环境的信息，请参阅[使用数据库预览环境](#mariadb-working-with-the-database-preview-environment)。要从控制台中访问预览环境，请选择 [rds-preview/](https://console.aws.amazon.com/rds-preview/)。

## Amazon RDS for MariaDB 已弃用的版本
<a name="MariaDB.Concepts.DeprecatedVersions"></a>

Amazon RDS for MariaDB 版本 10.0、10.1、10.2 和 10.3 已弃用。

有关 Amazon RDS for MariaDB 的弃用策略的信息，请参阅 [Amazon RDS 常见问题](https://aws.amazon.com/rds/faqs/)。

# 连接到 MariaDB 数据库实例
<a name="USER_ConnectToMariaDBInstance"></a>

Amazon RDS 配置数据库实例后，您就可以使用标准 MariaDB 客户端应用程序或实用程序与该实例连接。在连接字符串中，可以将数据库实例端点中的域名系统 (DNS) 地址指定为主机参数。您还可以将数据库实例端点中的端口号指定为端口参数。

可以使用 MySQL 命令行客户端等工具连接 Amazon RDS for MariaDB 数据库实例。有关使用 MySQL 命令行的更多信息，请参阅 MariaDB 文档中的 [mysql 命令行客户端](http://mariadb.com/kb/en/mariadb/mysql-command-line-client/)。您可以使用 Heidi 这款基于 GUI 的应用程序进行连接。有关更多信息，请参阅[下载 HeidiSQL](http://www.heidisql.com/download.php) 页面。有关安装 MySQL（包括 MySQL 命令行客户端）的信息，请参阅[安装和升级 MySQL](https://dev.mysql.com/doc/refman/8.0/en/installing.html)。

大多数 Linux 发行版包括 MariaDB 客户端，而不是 Oracle MySQL 客户端。要在 Amazon Linux 2023 上安装 MySQL 命令行客户端，请运行以下命令：

```
sudo dnf install mariadb105
```

要在 Amazon Linux 2 上安装 MySQL 命令行客户端，请运行以下命令：

```
sudo yum install mariadb
```

要在大多数基于 DEB 的 Linux 发行版上安装 MySQL 命令行客户端，请运行以下命令。

```
apt-get install mariadb-client
```

要检查 MySQL 命令行客户端的版本，请运行以下命令。

```
mysql --version
```

要阅读当前客户端版本的 MySQL 文档，请运行以下命令。

```
man mysql
```

要从基于 Amazon VPC 的 Virtual Private Cloud (VPC) 外部连接到数据库实例，该数据库实例必须可公开访问。此外，必须使用数据库实例安全组的入站规则授予访问权限，并且必须满足其他要求。有关更多信息，请参阅“[无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)”。

可以在连接到 MariaDB 数据库实例时使用 SSL 加密功能。有关信息，请参阅[Amazon RDS 上 MariaDB 数据库实例的 SSL/TLS 支持](MariaDB.Concepts.SSLSupport.md)。

要查找并连接到 RDS for MariaDB 数据库实例，请参阅以下主题。

**Topics**
+ [查找 MariaDB 数据库实例的连接信息](USER_ConnectToMariaDBInstance.EndpointAndPort.md)
+ [从 RDS for MariaDB 的 MySQL 命令行客户端进行连接（未加密）](USER_ConnectToMariaDBInstance.CLI.md)
+ [使用 AWS JDBC 驱动程序和 AWS Python 驱动程序连接到 RDS for MariaDB；](MariaDB.Connecting.Drivers.md)
+ [排除与 MariaDB 数据库实例的连接故障](USER_ConnectToMariaDBInstance.Troubleshooting.md)

# 查找 MariaDB 数据库实例的连接信息
<a name="USER_ConnectToMariaDBInstance.EndpointAndPort"></a>

数据库实例的连接信息包括其端点、端口和有效数据库用户，如主用户。例如，假设端点值为 `mydb.123456789012.us-east-1.rds.amazonaws.com`。在这种情况下，端口值是 `3306`，数据库用户是 `admin`。鉴于此信息，您可以在连接字符串中指定以下值：
+ 对于主机或主机名或 DNS 名称，请指定 `mydb.123456789012.us-east-1.rds.amazonaws.com`。
+ 对于端口，请指定 `3306`。
+ 对于用户，请指定 `admin`。

要连接到数据库实例，请使用 MariaDB 数据库引擎的任何客户端。例如，您可以使用 MySQL 命令行客户端或 MySQL Workbench。

要查找数据库实例的连接信息，您可以使用AWS 管理控制台、AWS Command Line Interface（AWS CLI）[describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令，或 Amazon RDS API [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作列出其详细信息。

## 控制台
<a name="USER_ConnectToMariaDBInstance.EndpointAndPort.Console"></a>

**在 AWS 管理控制台 中查找数据库实例的连接信息**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **数据库** 以显示数据库实例的列表。

1. 选择 MariaDB 数据库实例名称以显示其详细信息。

1. 在**连接和安全性**选项卡上，复制端点。另请注意端口号。您需要端点和端口号才能连接到数据库实例。  
![\[Amazon RDS 控制台中数据库实例的端点和端口。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/endpoint-port.png)

1. 如果需要查找主用户名，请选择 **Configuration (配置)** 选项卡并查看 **Master username (主用户名)** 值。

## AWS CLI
<a name="USER_ConnectToMariaDBInstance.EndpointAndPort.CLI"></a>

要使用 AWS CLI 查找 MariaDB 数据库实例的相关连接信息，请运行 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令。在调用中，查询数据库实例 ID、端点、端口和主用户名。

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-instances \
  --filters "Name=engine,Values=mariadb" \
  --query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"
```

对于 Windows：

```
aws rds describe-db-instances ^
  --filters "Name=engine,Values=mariadb" ^
  --query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"
```

您的输出应类似于以下内容。

```
[
    [
        "mydb1",
        "mydb1.123456789012.us-east-1.rds.amazonaws.com",
        3306,
        "admin"
    ],
    [
        "mydb2",
        "mydb2.123456789012.us-east-1.rds.amazonaws.com",
        3306,
        "admin"
    ]
]
```

## RDS API
<a name="USER_ConnectToMariaDBInstance.EndpointAndPort.API"></a>

要使用 Amazon RDS API 查找数据库实例的连接信息，请调用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作。在输出中，找到端点地址、端点端口和主用户名的值。

# 从 RDS for MariaDB 的 MySQL 命令行客户端进行连接（未加密）
<a name="USER_ConnectToMariaDBInstance.CLI"></a>

**重要**  
仅当客户端和服务器位于同一 VPC 中，并且网络受信任时，才会使用未加密的 MySQL 连接。有关使用加密连接的信息，请参阅 [从 MySQL 命令行客户端使用 SSL/TLS 连接到 Amazon RDS 上的 MariaDB 数据库实例（已加密）](USER_ConnectToMariaDBInstanceSSL.CLI.md)。

要使用 MySQL 命令行客户端连接到数据库实例，请在客户端计算机上的命令提示符处输入以下命令。执行此操作时，您将连接到 MariaDB 数据库实例上的数据库。将 *`<endpoint>`* 替换为数据库实例的 DNS 名称（端点）；并替换用于 *`<mymasteruser>`* 的主用户名。提示输入密码时，提供所使用的主密码。

```
mysql -h <endpoint> -P 3306 -u <mymasteruser> -p
```

在输入用户的密码后，您将看到类似于以下内容的输出。

```
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.10-MariaDB-log Source distribution
 
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  
MariaDB [(none)]>
```

# 使用 AWS JDBC 驱动程序和 AWS Python 驱动程序连接到 RDS for MariaDB；
<a name="MariaDB.Connecting.Drivers"></a>

使用 AWS JDBC 驱动程序和 AWS Python 驱动程序连接到 RDS for MariaDB 数据库实例。有关更多信息，请参阅以下主题。

**Topics**
+ [使用 Amazon Web Services（AWS）JDBC 驱动程序连接到 RDS for MariaDB](#MariaDB.Connecting.JDBCDriver)
+ [使用 Amazon Web Services（AWS）Python 驱动程序连接到 RDS for MariaDB](#MariaDB.Connecting.PythonDriver)

## 使用 Amazon Web Services（AWS）JDBC 驱动程序连接到 RDS for MariaDB
<a name="MariaDB.Connecting.JDBCDriver"></a>

Amazon Web Services（AWS）JDBC 驱动程序已重新设计为高级 JDBC 包装器。此包装器是对现有 JDBC 驱动程序各项功能的补充和扩展。该驱动程序与社区 MySQL Connector/J 驱动程序和社区 MariaDB Connector/J 驱动程序兼容。

要安装 AWS JDBC 驱动程序，请附加 AWS JDBC 驱动程序.jar 文件（位于应用程序 `CLASSPATH` 中），并保留对相应社区驱动程序的引用。按如下方式更新相应的连接 URL 前缀：
+ `jdbc:mysql://`到 `jdbc:aws-wrapper:mysql://`。
+ `jdbc:mariadb://`到 `jdbc:aws-wrapper:mariadb://`。

有关 AWS JDBC 驱动程序的更多信息及其完整使用说明，请参阅 [Amazon Web Services (AWS) JDBC Driver GitHub 存储库](https://github.com/awslabs/aws-advanced-jdbc-wrapper)。

## 使用 Amazon Web Services（AWS）Python 驱动程序连接到 RDS for MariaDB
<a name="MariaDB.Connecting.PythonDriver"></a>

Amazon Web Services（AWS）驱动程序设计为高级 Python 包装器。这款包装器是对开源 Psycopg 驱动程序的各项功能的补充和扩展。AWS Python 驱动程序支持 Python 3.8 及更高版本。您可以使用 `pip` 命令和 `psycopg` 开源软件包安装 `aws-advanced-python-wrapper` 程序包。

有关 AWS JDBC 驱动程序的更多信息及其完整使用说明，请参阅 [Amazon Web Services（AWS）Python 驱动程序 GitHub 存储库](https://github.com/awslabs/aws-advanced-python-wrapper)。

# 排除与 MariaDB 数据库实例的连接故障
<a name="USER_ConnectToMariaDBInstance.Troubleshooting"></a>

导致新数据库实例连接故障的两个常见原因如下：
+ 数据库实例是使用安全组创建的，而该安全组无法授权来自运行 MariaDB 应用程序或实用程序的设备或 Amazon EC2 实例的连接。数据库实例必须具有授权进行连接的 VPC 安全组。有关更多信息，请参阅 [Amazon VPC 和 Amazon RDS](USER_VPC.md)。

  您可以在安全组中添加或编辑入站规则。对于 **Source**，选择 **My IP**。这允许从浏览器中检测到的 IP 地址访问数据库实例。
+ 数据库实例是使用默认端口 3306 创建的，而您公司的防火墙规则不允许公司网络中的设备连接到该端口。要修复此故障，请重新创建使用不同端口的实例。

有关连接问题的更多信息，请参阅[无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。

# 保护 MariaDB 数据库实例连接安全
<a name="securing-mariadb-connections"></a>

您可以管理 MariaDB 数据库实例的安全性。

**Topics**
+ [Amazon RDS 上的 MariaDB 安全性](MariaDB.Concepts.UsersAndPrivileges.md)
+ [对于 RDS for MariaDB 使用密码验证插件](MariaDB.Concepts.PasswordValidationPlugins.md)
+ [使用 SSL/TLS 加密客户端与 Amazon RDS 上 MariaDB 数据库实例的连接](mariadb-ssl-connections.md)
+ [更新应用程序以使用新的 SSL/TLS 证书连接到 MariaDB 实例](ssl-certificate-rotation-mariadb.md)

# Amazon RDS 上的 MariaDB 安全性
<a name="MariaDB.Concepts.UsersAndPrivileges"></a>

MariaDB 数据库实例的安全性在三个级别上进行管理：
+ AWS Identity and Access Management 控制可以对数据库实例执行 Amazon RDS 管理操作的人员。使用 IAM 证书连接到AWS时，您的 IAM 账户必须具有授予执行 Amazon RDS 管理操作所需的权限的 IAM 策略。有关更多信息，请参阅 [Amazon RDS 的 Identity and Access Management](UsingWithRDS.IAM.md)。
+ 创建数据库实例时，可以使用 VPC 安全组控制哪些设备和 Amazon EC2 实例能够建立到数据库实例的端点和端口的连接。可以使用安全套接字层 (SSL)/传输层安全性协议 (TLS) 建立这些连接。此外，公司的防火墙规则也可以控制公司中运行的哪些设备可以建立到数据库实例的连接。
+ 建立到 MariaDB 数据库实例的连接之后，以与独立 MariaDB 实例相同的方式应用登录和权限的身份验证。`CREATE USER`、`RENAME USER`、`GRANT`、`REVOKE` 和 `SET PASSWORD` 等命令的作用与它们在独立数据库中的作用相同，就像直接修改数据库架构表。

 当您创建 Amazon RDS 数据库实例时，主用户有以下默认权限：
+  `alter` 
+  `alter routine` 
+  `create` 
+  `create routine` 
+  `create temporary tables` 
+  `create user` 
+  `create view` 
+  `delete` 
+  `drop` 
+  `event` 
+  `execute` 
+  `grant option` 
+  `index` 
+  `insert` 
+  `lock tables` 
+  `process` 
+  `references` 
+  `reload` 

  该权限仅限在 MariaDB 数据库实例上使用。它不授予对 `FLUSH LOGS` 或 `FLUSH TABLES WITH READ LOCK` 操作的访问权限。
+  `replication client` 
+  `replication slave` 
+  `select` 
+  `show create routine` 

  此权限仅适用于运行 11.4 及更高版本的 MariaDB 数据库实例。
+  `show databases` 
+  `show view` 
+  `trigger` 
+  `update` 

有关这些权限的更多信息，请参阅 MariaDB 文档中的[用户账户管理](http://mariadb.com/kb/en/mariadb/grant/)。

**注意**  
尽管您可以删除数据库实例上的主用户，但我们不建议这样做。要重新创建主用户，请使用 `ModifyDBInstance` API 或 `modify-db-instance` AWS CLI，并用相应参数指定一个新的主用户密码。如果实例中不存在主用户，将使用指定的密码创建主用户。

要为每个数据库实例提供管理服务，需在创建数据库实例时创建 `rdsadmin` 用户。如果试图删掉、重命名、修改 `rdsadmin` 账户的密码，或者修改该账户的权限，会导致出错。

若要允许管理数据库实例，需限制标准的 `kill` 和 `kill_query` 命令。提供了 Amazon RDS 命令 `mysql.rds_kill`、`mysql.rds_kill_query` 和 `mysql.rds_kill_query_id` 以便在 MariaDB 和 MySQL 中使用，因此您可以结束数据库实例上的用户会话或查询。

# 对于 RDS for MariaDB 使用密码验证插件
<a name="MariaDB.Concepts.PasswordValidationPlugins"></a>

从 RDS for MariaDB 版本 11.4 开始，您可以使用以下密码验证插件来增强数据库连接的安全性：
+ [simple\$1password\$1check](https://mariadb.com/kb/en/simple-password-check-plugin/) – 检查密码是否包含至少特定数量的特定类型字符。
+ [cracklib\$1password\$1check](https://mariadb.com/kb/en/cracklib_password_check/) – 检查密码是否出现在 [CrackLib](https://github.com/cracklib/cracklib) 库的字典文件中。

要启用这些插件，请在与数据库实例关联的数据库参数组中，将参数 `simple_password_check` 或 `cracklib_password_check` 的值设置为 `FORCE_PLUS_PERMANENT`。设置此值后，无法在运行时使用 `UNINSTALL PLUGIN` 语句卸载插件。

要禁用这些插件，请在与数据库实例关联的数据库参数组中，将参数 `simple_password_check` 或 `cracklib_password_check` 的值设置为 `OFF`。设置此值后，插件验证规则将不再适用于新密码。

有关在参数组中设置参数值的信息，请参阅[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

# 使用 SSL/TLS 加密客户端与 Amazon RDS 上 MariaDB 数据库实例的连接
<a name="mariadb-ssl-connections"></a>

安全套接字层 (SSL) 是用于保护客户端和服务器之间的网络连接的行业标准协议。在 SSL 版本 3.0 之后，此名称已更改为传输层安全性协议 (TLS)。Amazon RDS 对于 MariaDB 数据库实例支持 SSL/TLS 加密。使用 SSL/TLS，您可加密应用程序客户端和 MariaDB 数据库实例之间的连接。SSL/TLS 支持在所有 AWS 区域中都可用。

借助 Amazon RDS，可以通过使用 SSL/TLS 加密客户端与 MariaDB 数据库实例的连接，要求所有与 MariaDB 数据库实例的连接都使用 SSL/TLS，以及使用 SSL/TLS（加密）从 MySQL 命令行客户端进行连接，从而保护传输中数据。以下各节提供了有关为 Amazon RDS 上的 MariaDB 数据库实例配置和使用 SSL/TLS 加密的指导。

**Topics**
+ [Amazon RDS 上 MariaDB 数据库实例的 SSL/TLS 支持](MariaDB.Concepts.SSLSupport.md)
+ [Amazon RDS 上 MariaDB 数据库实例的特定用户账户需要 SSL/TLS](MariaDB-ssl-connections.require-ssl-users.md)
+ [所有与 Amazon RDS 上的 MariaDB 数据库实例的连接都需要 SSL/TLS](mariadb-ssl-connections.require-ssl.md)
+ [从 MySQL 命令行客户端使用 SSL/TLS 连接到 Amazon RDS 上的 MariaDB 数据库实例（已加密）](USER_ConnectToMariaDBInstanceSSL.CLI.md)

# Amazon RDS 上 MariaDB 数据库实例的 SSL/TLS 支持
<a name="MariaDB.Concepts.SSLSupport"></a>

在 Amazon RDS 预置数据库实例时，Amazon RDS 创建 SSL/TLS 证书，并将该证书安装在数据库实例上。这些证书由证书颁发机构签署。SSL/TLS 证书会将数据库实例端点作为 SSL/TLS 证书的公用名 (CN) 包含在内以防止欺诈攻击。

Amazon RDS 创建的 SSL/TLS 证书是受信任的根实体且在大多数情况下有效，但如果应用程序不接受证书链，则该证书可能会失败。如果应用程序不接受证书链，请尝试使用中间证书连接到 AWS 区域。例如，您必须使用中间证书通过 SSL/TLS 连接到 AWS GovCloud (US) 区域。

有关下载证书的信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。有关将 SSL/TLS 与 MySQL 一起使用的更多信息，请参阅[更新应用程序以使用新的 SSL/TLS 证书连接到 MariaDB 实例](ssl-certificate-rotation-mariadb.md)。

Amazon RDS for MariaDB 支持传输层安全性协议（TLS）版本 1.3、1.2、1.1 和 1.0。TLS 支持取决于 MariaDB 次要版本。下表显示各个 MariaDB 次要版本的 TLS 支持情况。


| TLS 版本 | MariaDB 11.8 | MariaDB 11.4 | MariaDB 10.11 | MariaDB 10.6 | MariaDB 10.5 | MariaDB 10.4 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  TLS 1.3  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  | 
|  TLS 1.2  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  |  所有次要版本  | 
|  TLS 1.1  |  不支持  |  不支持  |  不支持  |  10.6.16 及更低版本  |  10.5.23 及更低版本  |  10.4.32 及更低版本  | 
|  TLS 1.0  |  不支持  |  不支持  | 不支持 | 10.6.16 及更低版本 |  10.5.23 及更低版本  |  10.4.32 及更低版本  | 

# Amazon RDS 上 MariaDB 数据库实例的特定用户账户需要 SSL/TLS
<a name="MariaDB-ssl-connections.require-ssl-users"></a>

对于与 Amazon RDS 上的 MariaDB 数据库实例的指定用户账户连接，可以要求进行 SSL/TLS 加密。保护敏感信息免遭未经授权的访问或拦截，对于在考虑数据机密性的情况下强制执行安全策略至关重要。

若要求特定用户的账户建立 SSL/TLS 连接，请使用以下语句之一（具体取决于 MySQL 版本），来要求用户账户 `encrypted_user` 建立 SSL/TLS 连接。

为此，请使用以下语句。

```
ALTER USER 'encrypted_user'@'%' REQUIRE SSL;
```

有关与 MariaDB 的 SSL/TLS 连接的更多信息，请参阅 MariaDB 文档中的[保护客户端和服务器的连接](https://mariadb.com/kb/en/securing-connections-for-client-and-server/)。

# 所有与 Amazon RDS 上的 MariaDB 数据库实例的连接都需要 SSL/TLS
<a name="mariadb-ssl-connections.require-ssl"></a>

使用 `require_secure_transport` 参数要求与 MariaDB 数据库实例的所有用户连接都使用 SSL/TLS。对于 11.4 及更早版本，`require_secure_transport` 参数默认设置为 `OFF`。对于 11.8 及更高版本，默认值设置为 `ON`，强制对连接到您的数据库实例的连接使用 SSL/TLS。如果需要非安全连接，则可以将 `require_secure_transport` 参数更改为 `OFF`。

**注意**  
只有 MariaDB 版本 10.5 及更高版本才支持 `require_secure_transport` 参数。

您可通过更新数据库实例的数据库参数组来设置 `require_secure_transport` 参数值。您无需重启数据库实例即可使更改生效。

当数据库实例的 `require_secure_transport` 参数设置为 `ON` 时，如果数据库客户端能够建立加密连接，则可以连接到该数据库实例。否则，将向客户端返回类似于以下内容的错误消息：

```
ERROR 1045 (28000): Access denied for user 'USER'@'localhost' (using password: YES | NO)
```

有关设置参数的信息，请参阅[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

有关 `require_secure_transport` 参数的更多信息，请参阅 [MariaDB 文档](https://mariadb.com/docs/ent/ref/mdb/system-variables/require_secure_transport/)。

# 从 MySQL 命令行客户端使用 SSL/TLS 连接到 Amazon RDS 上的 MariaDB 数据库实例（已加密）
<a name="USER_ConnectToMariaDBInstanceSSL.CLI"></a>

如果您使用的是 MySQL 5.7 版本、MySQL 8.0 版本或 MariaDB 版本，则 `mysql` 客户端程序参数略有不同。

要查看使用的版本，请使用 `--version` 选项运行 `mysql` 命令。在以下示例中，结果显示客户端程序来自 MariaDB。

```
$ mysql --version
mysql  Ver 15.1 Distrib 10.5.15-MariaDB, for osx10.15 (x86_64) using readline 5.1
```

大多数 Linux 发行版（例如 Amazon Linux、CentOS、SUSE 和 Debian）都用 MariaDB 取代了 MySQL，`mysql` 版本来自 MariaDB。

要使用 SSL/TLS 连接到数据库实例，请执行以下步骤：

**使用 MySQL 命令行客户端连接到使用 SSL/TLS 加密的数据库实例**

1. 下载适用于所有 AWS 区域的根证书。

   有关下载证书的信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。

1. 使用 MySQL 命令行客户端，通过 SSL/TLS 加密连接到数据库实例。对于 `-h` 参数，替换为数据库实例的 DNS 名称（端点）。对于 `--ssl-ca` 参数，替换为 SSL/TLS 证书文件名。对于 `-P` 参数，替换为数据库实例的端口。对于 `-u` 参数，替换为有效数据库用户（如主用户）的用户名。根据系统提示输入主用户密码。

   以下示例说明了如何在 MariaDB 客户端和更高版本中使用 `--ssl-ca` 参数启动客户端。

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl -P 3306 -u myadmin -p
   ```

   如果要求 SSL/TLS 连接对照 SSL/TLS 证书中的端点验证数据库实例端点，请输入以下命令：

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-verify-server-cert -P 3306 -u myadmin -p
   ```

   以下示例说明了如何在 MySQL 5.7 和更高版本中使用 `--ssl-ca` 参数启动客户端。

   ```
   mysql -h mysql–instance1.123456789012.us-east-1.rds.amazonaws.com --ssl-ca=global-bundle.pem --ssl-mode=REQUIRED -P 3306 -u myadmin -p
   ```

1. 根据系统提示输入主用户密码。

您应该可以看到类似于如下所示的输出内容。

```
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.10-MariaDB-log Source distribution
 
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
```

# 更新应用程序以使用新的 SSL/TLS 证书连接到 MariaDB 实例
<a name="ssl-certificate-rotation-mariadb"></a>

自 2023 年 1 月 13 日起，Amazon RDS 发布了新的证书颁发机构（CA）证书，以便使用安全套接字层或传输层安全性协议（SSL/TLS）连接到 RDS 数据库实例。接下来，您可以找到有关更新应用程序以使用新证书的信息。

本主题可以帮助您确定应用程序是否需要证书验证才能连接到数据库实例。

**注意**  
某些应用程序配置为仅在它们可以成功验证服务器上的证书时才连接到 MariaDB。对于此类应用程序，您必须更新客户端应用程序信任存储，以包括新的 CA 证书。  
您可以指定以下 SSL 模式：`disabled`、`preferred` 和 `required`。当您使用 `preferred` SSL 模式且 CA 证书不存在或不是最新时，连接会恢复为不使用 SSL，且仍能成功连接。  
不建议使用 `preferred` 模式。在 `preferred` 模式下，如果连接遇到无效证书，则会停止使用加密并在未加密的状态下继续。

更新客户端应用程序信任存储中的 CA 证书后，可以在数据库实例上轮换这些证书。强烈建议在生产环境中实现这些过程之前，先在开发或测试环境中测试它们。

有关证书轮换的更多信息，请参阅[轮换 SSL/TLS 证书](UsingWithRDS.SSL-certificate-rotation.md)。有关下载证书的更多信息，请参阅[使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。有关对 MariaDB 数据库实例使用 SSL/TLS 的信息，请参阅[Amazon RDS 上 MariaDB 数据库实例的 SSL/TLS 支持](MariaDB.Concepts.SSLSupport.md)。

**Topics**
+ [确定客户端是否需要证书验证才能连接](#ssl-certificate-rotation-mariadb.determining)
+ [更新应用程序信任存储](#ssl-certificate-rotation-mariadb.updating-trust-store)
+ [用于建立 SSL 连接的示例 Java 代码](#ssl-certificate-rotation-mariadb.java-example)

## 确定客户端是否需要证书验证才能连接
<a name="ssl-certificate-rotation-mariadb.determining"></a>

您可以检查 JDBC 客户端和 MySQL 客户端是否需要证书验证才能连接。

### JDBC
<a name="ssl-certificate-rotation-mysql.determining-client.jdbc"></a>

以下使用 MySQL Connector/J 8.0 的示例显示了一种方法，用于检查应用程序的 JDBC 连接属性以确定成功的连接是否需要有效证书。有关 MySQL 的所有 JDBC 连接选项的更多信息，请参阅 MySQL 文档中的[配置属性](https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html)。

当使用 MySQL Connector/J 8.0 时，如果您的连接属性将 `sslMode` 设置为 `VERIFY_CA` 或 `VERIFY_IDENTITY`，则 SSL 连接需要对服务器 CA 证书进行验证，如以下示例所示。

```
Properties properties = new Properties();
properties.setProperty("sslMode", "VERIFY_IDENTITY");
properties.put("user", DB_USER);
properties.put("password", DB_PASSWORD);
```

**注意**  
如果您使用 MySQL Java Connector v5.1.38 或更高版本或者 MySQL Java Connector v8.0.9 或更高版本连接到数据库，即使您没有明确配置应用程序在连接到数据库时使用 SSL/TLS，这些客户端驱动程序仍默认为使用 SSL/TLS。此外，在使用 SSL/TLS 时，它们会执行部分证书验证，如果数据库服务器证书过期，则无法连接。  
作为安全最佳实践，请指定除此处所示提示以外的密码。

### MySQL
<a name="ssl-certificate-rotation-mysql.determining-client.mysql"></a>

以下使用 MySQL 客户端的示例显示了两种方法，用于检查脚本的 MySQL 连接以确定成功的连接是否需要有效证书。有关 MySQL 客户端的所有连接选项的更多信息，请参阅 MySQL 文档中的[加密连接的客户端配置](https://dev.mysql.com/doc/refman/en/using-encrypted-connections.html#using-encrypted-connections-client-side-configuration)。

当使用 MySQL 5.7 或 MySQL 8.0 客户端时，如果对于 `--ssl-mode` 选项，您指定 `VERIFY_CA` 或 `VERIFY_IDENTITY`，则 SSL 连接需要对服务器 CA 证书进行验证，如以下示例所示。

```
mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-mode=VERIFY_CA                
```

当使用 MySQL 5.6 客户端时，如果您指定 `--ssl-verify-server-cert` 选项，则 SSL 连接需要对服务器 CA 证书进行验证，如以下示例所示。

```
mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-verify-server-cert            
```

## 更新应用程序信任存储
<a name="ssl-certificate-rotation-mariadb.updating-trust-store"></a>

有关更新 MySQL 应用程序的信任存储的信息，请参阅 MariaDB 文档中的[将 TLS/SSL 与 MariaDB Connector/J 结合使用](https://mariadb.com/kb/en/library/using-tls-ssl-with-mariadb-java-connector/)。

有关下载根证书的信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。

有关导入证书的示例脚本，请参阅 [将证书导入信任存储的示例脚本](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script)。

**注意**  
更新信任存储时，除了添加新证书外，还可以保留较旧证书。

如果在应用程序中使用 MariaDB Connector/J JDBC 驱动程序，请在该应用程序中设置以下属性。

```
System.setProperty("javax.net.ssl.trustStore", certs);
System.setProperty("javax.net.ssl.trustStorePassword", "password");
```

启动应用程序时，请设置以下属性。

```
java -Djavax.net.ssl.trustStore=/path_to_truststore/MyTruststore.jks -Djavax.net.ssl.trustStorePassword=my_truststore_password com.companyName.MyApplication        
```

**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

## 用于建立 SSL 连接的示例 Java 代码
<a name="ssl-certificate-rotation-mariadb.java-example"></a>

以下代码说明如何设置使用 JDBC 的 SSL 连接。

```
private static final String DB_USER = "admin";

        private static final String DB_USER = "user name";
        private static final String DB_PASSWORD = "password";
        // This key store has only the prod root ca.
        private static final String KEY_STORE_FILE_PATH = "file-path-to-keystore";
        private static final String KEY_STORE_PASS = "keystore-password";
        
    public static void main(String[] args) throws Exception {
        Class.forName("org.mariadb.jdbc.Driver");

        System.setProperty("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH);
        System.setProperty("javax.net.ssl.trustStorePassword", KEY_STORE_PASS);

        Properties properties = new Properties();
        properties.put("user", DB_USER);
        properties.put("password", DB_PASSWORD);


        Connection connection = DriverManager.getConnection("jdbc:mysql://ssl-mariadb-public.cni62e2e7kwh.us-east-1.rds.amazonaws.com:3306?useSSL=true",properties);
        Statement stmt=connection.createStatement();

        ResultSet rs=stmt.executeQuery("SELECT 1 from dual");

        return;
    }
```

**重要**  
在确定了数据库连接使用 SSL/TLS 并更新了应用程序信任存储之后，可以更新数据库以使用 rds-ca-rsa2048-g1 证书。有关说明，请参阅 [通过修改数据库实例或集群来更新 CA 证书](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating) 中的步骤 3。  
作为安全最佳实践，请指定除此处所示提示以外的密码。

# 使用 Amazon RDS 优化读取提高 RDS for MariaDB 的查询性能
<a name="rds-optimized-reads-mariadb"></a>

使用 Amazon RDS 优化读取，您可以更快地处理 RDS for MariaDB 查询。与不使用 RDS 优化读取的数据库实例相比，使用 RDS 优化读取的 RDS for MariaDB 数据库实例可以实现最多快 2 倍的查询处理速度。

**Topics**
+ [RDS 优化读取概述](#rds-optimized-reads-mariadb-overview)
+ [RDS 优化读取的使用案例](#rds-optimized-reads-mariadb-use-cases)
+ [RDS 优化读取的最佳实践](#rds-optimized-reads-mariadb-best-practices)
+ [使用 RDS 优化读取](#rds-optimized-reads-mariadb-using)
+ [监控使用 RDS 优化读取的数据库实例](#rds-optimized-reads-mariadb-monitoring)
+ [RDS 优化读取的限制](#rds-optimized-reads-mariadb-limitations)

## RDS 优化读取概述
<a name="rds-optimized-reads-mariadb-overview"></a>

当您使用开启了 RDS 优化读取的 RRDS for MariaDB 数据库实例时，您的数据库实例通过使用实例存储实现更快的查询性能。*实例存储*为数据库实例提供临时性块级存储。存储位于物理上附加到主机服务器的非易失性存储规范（NVMe）固态硬盘（SSD）上。此存储针对低延迟、高随机输入/输出性能和高速连续读取吞吐量进行了优化。

默认情况下，当数据库实例使用带有实例存储的数据库实例类（例如 db.m5d 或 db.m6gd）时，RDS 优化读取处于开启状态。使用 RDS 优化读取，一些临时对象存储在实例存储中。这些临时对象包括内部临时文件、内部磁盘上的临时表、内存映射文件和二进制日志（binlog）缓存文件。有关实例存储的更多信息，请参阅《适用于 Linux 实例的 Amazon Elastic Compute Cloud 用户指南》**中的 [Amazon EC2 实例存储](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)。

在 MariaDB 中生成用于查询处理的临时对象的工作负载可以利用实例存储来加快查询处理速度。此类工作负载包括涉及排序、哈希聚合、高负载联接、公用表表达式（CTE）的查询以及对未索引列的查询。无论用于持久 Amazon EBS 存储的存储配置如何，这些实例存储卷都能提供更高的 IOPS 和性能。由于 RDS 优化读取将对临时对象的操作分载到实例存储，因此永久存储（Amazon EBS）的每秒进行读写操作的次数（IOPS）或吞吐量现在可用于对永久对象进行的操作。这些操作包括常规数据文件读取和写入以及后台引擎操作，例如刷新和插入缓冲区合并。

**注意**  
手动和自动 RDS 快照仅包含用于永久对象的引擎文件。在实例存储中创建的临时对象不包含在 RDS 快照中。

## RDS 优化读取的使用案例
<a name="rds-optimized-reads-mariadb-use-cases"></a>

如果您的工作负载严重依赖于临时对象（例如内部表或文件）来执行查询，那么启用 RDS 优化读取会给您带来好处。以下使用案例是 RDS 优化读取的候选使用案例：
+ 使用复杂的公用表表达式（CTE）、派生表和分组操作运行分析查询的应用程序
+ 通过未优化的查询提供大量读取流量的只读副本
+ 运行涉及复杂操作（例如，带 `GROUP BY` 和 `ORDER BY` 子句的查询）的按需或动态报告查询的应用程序
+ 使用内部临时表进行查询处理的工作负载

  您可以监控引擎状态变量 `created_tmp_disk_tables`，以确定在数据库实例上创建的基于磁盘的临时表的数量。
+ 直接或在过程中创建大型临时表以存储中间结果的应用程序
+ 对非索引列执行分组或排序的数据库查询

## RDS 优化读取的最佳实践
<a name="rds-optimized-reads-mariadb-best-practices"></a>

对于 RDS 优化读取使用以下最佳实践：
+ 为只读查询添加重试逻辑，以防它们在执行过程中由于实例存储已满而失败。
+ 使用 CloudWatch 指标 `FreeLocalStorage` 监控实例存储上的可用存储空间。如果由于数据库实例上的工作负载导致实例存储达到其极限，请修改数据库实例以使用更大的数据库实例类。
+ 当您的数据库实例有足够的内存但仍达到实例存储上的存储限制时，增加 `binlog_cache_size` 值以将特定于会话的二进制日志条目保留在内存中。此配置可防止将二进制日志条目写入磁盘上的临时二进制日志缓存文件。

  `binlog_cache_size` 参数是特定于会话的。您可以更改每个新会话的值。此参数的设置可以提高高峰工作负载期间数据库实例的内存利用率。因此，请考虑根据应用程序的工作负载模式和数据库实例上的可用内存增加参数值。
+ 对 `binlog_format` 使用 `MIXED` 的默认值。根据事务的大小，将 `binlog_format` 设置为 `ROW` 可能会导致实例存储上的二进制日志缓存文件很大。
+ 避免在单个事务中进行批量更改。这些类型的事务会在实例存储上生成大型二进制日志缓存文件，并在实例存储已满时导致问题。考虑将写入分成多个小事务，以显著减少二进制日志缓存文件的存储使用量。

## 使用 RDS 优化读取
<a name="rds-optimized-reads-mariadb-using"></a>

当您在单可用区数据库实例部署或多可用区数据库实例部署中预调配具有以下数据库实例类之一的 RDS for MariaDB 数据库实例时，该数据库实例会自动使用 RDS 优化型读取功能。

要启用 RDS 优化读取，请执行以下操作之一：
+ 使用其中一个数据库实例类创建 RDS for MariaDB 数据库实例。有关更多信息，请参阅 [创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。
+ 修改现有 RDS for MariaDB 数据库实例以使用其中一个数据库实例类。有关更多信息，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

在支持其中一个或多个数据库实例类（具有本地 NVMe SSD 存储）的所有 AWS 区域中，均可使用 RDS 优化型读取功能。有关数据库实例类的信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。

数据库实例类可用性因 AWS 区域而异。要确定特定 AWS 区域中是否支持数据库实例类，请参阅[确定 AWS 区域 中的数据库实例类支持](Concepts.DBInstanceClass.RegionSupport.md)。

如果您不想使用 RDS 优化读取，请修改您的数据库实例，使其不使用支持该特征的数据库实例类。

## 监控使用 RDS 优化读取的数据库实例
<a name="rds-optimized-reads-mariadb-monitoring"></a>

您可以使用以下 CloudWatch 指标监控使用 RDS 优化读取的数据库实例：
+ `FreeLocalStorage`
+ `ReadIOPSLocalStorage`
+ `ReadLatencyLocalStorage`
+ `ReadThroughputLocalStorage`
+ `WriteIOPSLocalStorage`
+ `WriteLatencyLocalStorage`
+ `WriteThroughputLocalStorage`

这些指标提供有关可用实例存储的存储空间、IOPS 和吞吐量的数据。有关这些指标的更多信息，请参阅。[Amazon RDS 的 Amazon CloudWatch 实例级指标](rds-metrics.md#rds-cw-metrics-instance)

## RDS 优化读取的限制
<a name="rds-optimized-reads-mariadb-limitations"></a>

以下限制适用于 RDS 优化读取：
+ 以下 RDS for MariaDB 版本支持 RDS 优化读取：
  + 11.4 及更高主要版本的所有可用次要版本
  + 10.11.4 及更高的 10.11 版本
  + 10.6.7 和更高的 10.6 版本
  + 10.5.16 和更高的 10.5 版本
  + 10.4.25 和更高的 10.4 版本

  有关 RDS for MariaDB 版本的信息，请参阅 [Amazon RDS 上的 MariaDB 版本](MariaDB.Concepts.VersionMgmt.md)。
+ 您无法在支持 RDS 优化读取的数据库实例类上将临时对象的位置更改为永久存储（Amazon EBS）。
+ 在数据库实例上启用二进制日志记录时，最大事务大小受实例存储大小的限制。在 MariaDB 中，任何需要的存储空间比 `binlog_cache_size` 值更多的会话都会将事务更改写入临时二进制日志缓存文件，这些文件是在实例存储上创建的。
+ 实例存储已满时，事务可能会失败。

# 使用适用于 MariaDB 的 Amazon RDS 优化型写入功能提高写入性能
<a name="rds-optimized-writes-mariadb"></a>

您可以使用适用于 MariaDB 的 RDS 优化写入功能来提高写入事务的性能。当 RDS for MariaDB 数据库使用 RDS 优化型写入功能时，它最多可以实现高两倍的写入事务吞吐量。

**Topics**
+ [RDS 优化写入概述](#rds-optimized-writes-overview)
+ [使用 RDS 优化写入](#rds-optimized-writes-using-mariadb)
+ [在现有数据库上启用 RDS 优化写入](#rds-optimized-writes-modify-enable-mariadb)
+ [RDS 优化写入的限制](#rds-optimized-writes-limitations-mariadb)

## RDS 优化写入概述
<a name="rds-optimized-writes-overview"></a>

当您开启 RDS 优化写入功能时，您的 RDS for MariaDB 数据库在将数据刷新到持久存储时仅写入一次，无需双写缓冲区。数据库继续为可靠的数据库事务提供 ACID 属性保护，同时提高性能。

关系数据库（如 MariaDB）为可靠的数据库事务提供原子性、一致性、隔离性和持久性的 *ACID 属性*。为了帮助提供这些属性，MariaDB 使用一个名为*双写缓冲区*的数据存储区域，以防止出现不完整页面写入错误。这些错误发生在数据库更新页面时出现硬件故障的情况下，例如停电时。MariaDB 数据库可以检测不完整页面写入，并使用双写缓冲区中的页面副本进行恢复。虽然这种技术提供了保护，但也会导致额外的写入操作。有关 MariaDB 双写缓冲区的更多信息，请参阅 MariaDB 文档中的 [InnoDB 双写缓冲区](https://mariadb.com/kb/en/innodb-doublewrite-buffer/)。

开启 RDS 优化型写入功能后，RRDS for MariaDB 数据库将在数据刷新到持久存储时仅写入一次，而不使用双写缓冲区。如果您在 RDS for MariaDB 数据库上运行写入密集型工作负载，RDS 优化型写入功能非常有用。具有写入密集型工作负载的数据库示例包括支持数字支付、金融交易和游戏应用程序的数据库。

这些数据库在使用 AWS Nitro 系统的数据库实例类上运行。由于这些系统中的硬件配置，数据库可以在一个步骤中可靠而持久地将 16KiB 页直接写入数据文件。AWS Nitro 系统使 RDS 优化写入成为可能。

您可以设置新的数据库参数 `rds.optimized_writes` 来控制适用于 RDS for MariaDB 数据库的 RDS 优化型写入特征。在以下版本的 RDS for MariaDB 的数据库参数组中访问此参数：
+ 11.8 及更高主要版本的所有可用次要版本
+ 11.4.3 及更高的 11.4 版本
+ 10.11.4 及更高的 10.11 版本
+ 10.6.10 和更高的 10.6 版本

使用以下值设置参数：
+ `AUTO` – 如果数据库支持 RDS 优化写入，则开启此功能。如果数据库不支持 RDS 优化写入，请将其关闭。此设置是默认设置。
+ `OFF` – 关闭 RDS 优化写入，即使数据库支持此功能也不例外。

如果您将配置为使用 RDS 优化型写入特征的 RDS for MariaDB 数据库迁移到不支持该特征的数据库实例类，RDS 会自动对该数据库关闭 RDS 优化型写入特征。

关闭 RDS 优化型写入功能时，数据库使用 MariaDB 双写缓冲区。

要确定 RDS for MariaDB 数据库是否使用 RDS 优化型写入功能，请查看数据库的 `innodb_doublewrite` 参数的当前值。如果数据库使用 RDS 优化写入，则此参数设置为 `FALSE`（`0`）。

## 使用 RDS 优化写入
<a name="rds-optimized-writes-using-mariadb"></a>

使用 RDS 控制台、AWS CLI 或 RDS API 创建 RDS for MariaDB 数据库时，可以开启 RDS 优化型写入功能。在数据库创建过程中，当以下两个条件都适用时，RDS 优化写入功能会自动开启：
+ 您可以指定支持 RDS 优化写入的数据库引擎版本和数据库实例类。
  + 以下 RDS for MariaDB 版本支持 RDS 优化型写入功能：
    + 11.8 及更高主要版本的所有可用次要版本
    + 11.4.3 及更高的 11.4 版本
    + 10.11.4 及更高的 10.11 版本
    + 10.6.10 和更高的 10.6 版本

    有关 RDS for MariaDB 版本的信息，请参阅 [Amazon RDS 上的 MariaDB 版本](MariaDB.Concepts.VersionMgmt.md)。
  + 使用以下数据库实例类的 RDS for MariaDB 数据库支持 RDS 优化型写入功能：
    + db.m7i
    + db.m7g
    + db.m6g
    + db.m6gd
    + db.m6i
    + db.m5
    + db.m5d
    + db.r7i
    + db.r7g
    + db.r6g
    + db.r6gd
    + db.r6i
    + db.r5
    + db.r5b
    + db.r5d
    + db.x2idn
    + db.x2iedn

    有关数据库实例类的信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。

    数据库实例类可用性因 AWS 区域而异。要确定特定 AWS 区域中是否支持数据库实例类，请参阅[确定 AWS 区域 中的数据库实例类支持](Concepts.DBInstanceClass.RegionSupport.md)。
+ 在与数据库关联的参数组中，`rds.optimized_writes` 参数设置为 `AUTO`。在默认参数组中，此参数始终设置为 `AUTO`。

如果您需要使用支持 RDS 优化型写入特征的数据库引擎版本和数据库实例类，但您不想使用此特征，则在创建数据库时指定一个自定义参数组。在此参数组中，将 `rds.optimized_writes` 参数设置为 `OFF`。如果您希望数据库稍后使用 RDS 优化写入，可以将此参数设置为 `AUTO` 以将其开启。有关创建自定义参数组和设置参数的信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

有关创建数据库实例的信息，请参阅[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。

### 控制台
<a name="rds-optimized-writes-using-console"></a>

当您使用 RDS 控制台创建 RDS for MariaDB 数据库时，您可以筛选支持 RDS 优化型写入功能的数据库引擎版本和数据库实例类。开启筛选条件后，您可以从可用的数据库引擎版本和数据库实例类中进行选择。

要选择支持 RDS 优化型写入功能的数据库引擎版本，请在**引擎版本**中筛选支持该功能的 RDS for MariaDB 数据库引擎版本，然后选择版本。

![\[引擎选项部分，针对引擎版本开启了 Amazon RDS 优化型写入功能筛选条件。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-version-filter-mariadb.png)


在 **Instance configuration**（实例配置）部分中，筛选支持 RDS 优化写入的数据库实例类，然后选择数据库实例类。

![\[实例配置部分，针对数据库实例类开启了 Amazon RDS 优化型写入功能筛选条件。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/rds-optimized-writes-class-filter.png)


做出这些选择后，您可以选择符合要求的其他设置，并使用控制台完成创建 RDS for MariaDB 数据库。

### AWS CLI
<a name="rds-optimized-writes-using-cli"></a>

要使用 AWS CLI 创建数据库实例，请运行 [create-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-instance.html) 命令。确保 `--engine-version` 和 `--db-instance-class` 值支持 RDS 优化写入。此外，确保与数据库实例关联的参数组将 `rds.optimized_writes` 参数设置为 `AUTO`。以下示例将默认参数组与数据库实例关联。

**Example 创建使用 RDS 优化写入的数据库实例**  
对于 Linux、macOS 或 Unix：  

```
1. aws rds create-db-instance \
2.     --db-instance-identifier mydbinstance \
3.     --engine mariadb \
4.     --engine-version 10.6.10 \
5.     --db-instance-class db.r5b.large \
6.     --manage-master-user-password \
7.     --master-username admin \
8.     --allocated-storage 200
```
对于：Windows  

```
1. aws rds create-db-instance ^
2.     --db-instance-identifier mydbinstance ^
3.     --engine mariadb ^
4.     --engine-version 10.6.10 ^
5.     --db-instance-class db.r5b.large ^
6.     --manage-master-user-password ^
7.     --master-username admin ^
8.     --allocated-storage 200
```

### RDS API
<a name="rds-optimized-writes-using-api"></a>

您可以使用 [CreateDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html) 操作创建数据库实例。使用此操作时，请确保 `EngineVersion` 和 `DBInstanceClass` 值支持 RDS 优化写入。此外，确保与数据库实例关联的参数组将 `rds.optimized_writes` 参数设置为 `AUTO`。

## 在现有数据库上启用 RDS 优化写入
<a name="rds-optimized-writes-modify-enable-mariadb"></a>

要修改现有 RDS for MariaDB 数据库以开启 RDS 优化写入功能，数据库必须使用支持的数据库引擎版本和数据库实例类创建。此外，数据库必须是在 2023 年 3 月 7 日发布 RDS 优化写入*之后*创建的，因为所需的底层文件系统配置与此次发布前创建的数据库的配置不兼容。如果满足上述条件，则可以通过将 `rds.optimized_writes` 参数设置为 `AUTO` 来开启 RDS 优化写入。

如果您的数据库*不是*使用支持的引擎版本、实例类或文件系统配置创建的，则可以使用 RDS 蓝绿部署来迁移到支持的配置。创建蓝绿部署时，请执行以下操作：
+ 选择**在绿色数据库上启用优化写入**，然后指定支持 RDS 优化写入的引擎版本和数据库实例类。有关支持的引擎版本和实例类的列表，请参阅[使用 RDS 优化写入](#rds-optimized-writes-using-mariadb)。
+ 在**存储**下，选择**升级存储文件系统配置**。此选项将数据库升级到兼容的底层文件系统配置。

创建蓝绿部署时，如果将 `rds.optimized_writes` 参数设置为 `AUTO`，则在绿色环境中将自动启用 RDS 优化写入。然后，您可以切换蓝绿部署，以将绿色环境升级为新的生产环境。

有关更多信息，请参阅 [在 Amazon RDS 中创建蓝绿部署](blue-green-deployments-creating.md)。

## RDS 优化写入的限制
<a name="rds-optimized-writes-limitations-mariadb"></a>

当您从快照中还原 RDS for MariaDB 数据库时，仅当满足以下所有条件时，才能为数据库开启 RDS 优化写入功能：
+ 快照是从支持 RDS 优化写入的数据库创建的。
+ 快照是从发布 RDS 优化型写入功能*之后*创建的数据库中创建的。
+ 快照还原为支持 RDS 优化写入的数据库。
+ 还原的数据库与一个参数组相关联，该参数组的 `rds.optimized_writes` 参数设置为 `AUTO`。

# 升级 MariaDB 数据库引擎
<a name="USER_UpgradeDBInstance.MariaDB"></a>

如果 Amazon RDS 支持数据库引擎的新版本，您可以将您的数据库实例升级到新版本。MariaDB 数据库实例具有两种升级：主要版本升级和次要版本升级。

*主要版本升级*会包含不与现有应用程序向后兼容的数据库更改。因此，您必须手动为数据库实例执行主要版本升级。您可以通过修改数据库实例来启动主要版本升级。但是，执行主要版本升级之前，建议您按照[RDS for MariaDB 的主要版本升级](USER_UpgradeDBInstance.MariaDB.Major.md)中的说明操作。

相比之下，*次要版本升级*仅包括与现有应用程序向后兼容的更改。您可以通过修改数据库实例来手动启动次要版本升级。您也可以在创建或修改数据库实例时启用**自动次要版本升级**选项。这样做意味着数据库实例在 Amazon RDS 测试并批准新版本后会自动升级。有关执行升级的信息，请参阅 [升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

如果 MariaDB 数据库实例正在使用只读副本，则必须在升级源实例之前升级所有只读副本。如果数据库实例在多可用区部署中，则同时升级写入器和备用副本。在升级完成之前，数据库实例可能无法使用。

有关 MariaDB 支持的版本以及版本管理的更多信息，请参阅 [Amazon RDS 上的 MariaDB 版本](MariaDB.Concepts.VersionMgmt.md)。

数据库引擎升级需要停机。停机持续时间因数据库实例的大小而异。

Amazon RDS 还支持升级推出策略，以管理跨多个数据库资源和 AWS 账户的自动次要版本升级。有关更多信息，请参阅 [使用 AWS Organizations 升级推出策略自动升级次要版本](RDS.Maintenance.AMVU.UpgradeRollout.md)。

**提示**  
您可以使用蓝绿部署，显著减少数据库实例升级所需的停机时间。有关更多信息，请参阅 [使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。

**Topics**
+ [MariaDB 升级的注意事项](#USER_UpgradeDBInstance.MariaDB.Considerations)
+ [查找有效的升级目标](#USER_UpgradeDBInstance.MariaDB.FindingTargets)
+ [MariaDB 版本号](USER_UpgradeDBInstance.MariaDB.VersionID.md)
+ [RDS for MariaDB 中的 RDS 版本号](USER_UpgradeDBInstance.MariaDB.rds.version.md)
+ [RDS for MariaDB 的主要版本升级](USER_UpgradeDBInstance.MariaDB.Major.md)
+ [升级 MariaDB 数据库实例](#USER_UpgradeDBInstance.MariaDB.Upgrading)
+ [RDS for MariaDB 的自动次要版本升级](USER_UpgradeDBInstance.MariaDB.Minor.md)
+ [使用只读副本在升级 RDS for MariaDB 数据库时减少停机时间](USER_UpgradeDBInstance.MariaDB.ReducedDowntime.md)
+ [使用事件监控 RDS for MariaDB 数据库引擎升级](USER_UpgradeDBInstance.MariaDB.Monitoring.md)

## MariaDB 升级的注意事项
<a name="USER_UpgradeDBInstance.MariaDB.Considerations"></a>

在升级流程期间，Amazon RDS 会创建两个或更多数据库快照。在进行任何升级更改*之前*，Amazon RDS 最多会拍摄两个数据库实例快照。如果无法完成数据库的升级，那么，就可以还原这些快照之一，来创建一个运行旧版本的数据库实例。升级完成后，Amazon RDS 会为数据库实例拍摄另一个快照。无论 AWS Backup 是否管理数据库实例的备份，Amazon RDS 都会拍摄这些快照。

**注意**  
如果您将数据库实例的备份保留期设置为大于 0 的数字，则 Amazon RDS 只需创建数据库快照。要更改您的备份保留期，请参阅 [修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。

升级完成后，您无法恢复为数据库引擎的以前版本。如果要返回以前版本，则还原创建的第一个数据库快照以新建数据库实例。

您可以控制何时将数据库实例升级到 Amazon RDS 支持的新版本。此级别的控制可帮助您保留与特定数据库版本的兼容性，并在生产中部署前使用应用程序测试新版本。在您准备好后，可在与时间表最搭配的时间执行版本升级。

如果数据库实例使用只读副本，则必须先升级所有只读副本，然后再升级源实例。

如果数据库实例在多可用区部署中，则同时升级主数据库实例和备用数据库实例。主副本和备用数据库实例将同时升级，而您会遇到中断，直到升级完成。中断时间因数据库引擎、引擎版本和数据库实例大小而异。

## 查找有效的升级目标
<a name="USER_UpgradeDBInstance.MariaDB.FindingTargets"></a>

使用 AWS 管理控制台 升级数据库实例时，它会显示数据库实例的有效升级目标。您还可以运行以下 AWS CLI 命令来标识数据库实例的有效升级目标：

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
  --engine mariadb \
  --engine-version version_number \
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

对于：Windows

```
aws rds describe-db-engine-versions ^
  --engine mariadb ^
  --engine-version version_number ^
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

例如，要标识 MariaDB 版本 10.5.17 数据库实例的有效升级目标，请运行以下 AWS CLI 命令：

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
  --engine mariadb \
  --engine-version 10.5.17 \
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

对于：Windows

```
aws rds describe-db-engine-versions ^
  --engine mariadb ^
  --engine-version 10.5.17 ^
  --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

# MariaDB 版本号
<a name="USER_UpgradeDBInstance.MariaDB.VersionID"></a>

RDS for MariaDB 数据库引擎的版本编号序列采用 *major.minor.patch.YYYYMMDD* 或 *major.minor.patch* 形式，例如 10.11.5.R2.20231201 或 10.4.30。所使用的格式取决于 MariaDB 引擎版本。

**major**  
主要版本号是版本号的整数和第一个小数点后的部分，例如 10.11。主要版本升级会增加版本号的主要版本部分。例如，从 *10.5*.20 升级到 10.6.12 是主要版本升级，其中 *10.5* 和 *10.6* 为主要版本号。

**minor**  
次要版本号是版本号的第三部分，例如 10.11.5 中的 5。

**patch**  
补丁是版本号的第四部分，例如 10.11.5.R2 中的 R2。RDS 补丁版本包括在发布后添加到次要版本的重要错误修复。

**YYYYMMDD**  
日期是版本号的第五部分，例如 10.11.5.R2.20231201 中的 20231201。RDS 日期版本是一个安全补丁，它包括在发布后添加到次要版本的重要安全修复程序。它不包括任何可能更改引擎行为的修复程序。

下表说明了 RDS for MariaDB 版本 10.11 的命名方案。


| 10.11 次要版本 | 命名模式 | 
| --- | --- | 
| ≥5  | 新的数据库实例使用 *major.minor.patch.YYMMDD*，例如 10.11.5.R2.20231201。 在下一次主要版本或次要版本升级之前，现有数据库实例可能使用 *major.minor.patch*，例如 10.11.5.R2。 | 
| < 5 |  现有数据库实例使用 *major.minor.patch*，例如 10.11.4.R2。  | 

下表说明了 RDS for MariaDB 版本 10.6 的命名方案。


| 10.6 次要版本 | 命名模式 | 
| --- | --- | 
| ≥ 14 |  新的数据库实例使用 *major.minor.patch.YYMMDD*，例如 10.6.14.R2.20231201。 在下一次主要版本或次要版本升级之前，现有数据库实例可能使用 *major.minor.patch*，例如 10.6.14.R2。 | 
| < 14 | 现有数据库实例使用 *major.minor.patch*，例如 10.6.13.R2。 | 

下表说明了 RDS for MariaDB 版本 10.5 的命名方案。


| 10.5 次要版本 | 命名模式 | 
| --- | --- | 
| ≥ 21 |  新的数据库实例使用 *major.minor.patch.YYMMDD*，例如 10.5.21.R2.20231201。 在下一次主要版本或次要版本升级之前，现有数据库实例可能使用 *major.minor.patch*，例如 10.5.21.R2。 | 
| < 21 |  现有数据库实例使用 *major.minor.patch*，例如 10.5.20.R2。  | 

下表说明了 RDS for MariaDB 版本 10.4 的命名方案。


| 10.4 次要版本 | 命名模式 | 
| --- | --- | 
| ≥ 30 |  新的数据库实例使用 *major.minor.patch.YYMMDD*，例如 10.4.30.R2.20231201。 在下一次主要版本或次要版本升级之前，现有数据库实例可能使用 *major.minor.patch*，例如 10.4.30.R2。 | 
| < 30 |  现有数据库实例使用 *major.minor.patch*，例如 10.4.29.R2。  | 

# RDS for MariaDB 中的 RDS 版本号
<a name="USER_UpgradeDBInstance.MariaDB.rds.version"></a>

RDS 版本号使用 `major.minor.patch` 或 `major.minor.patch.YYYYMMDD` 命名方案。RDS 补丁版本包括在发布后添加到次要版本的重要错误修复。RDS 日期版本（*YYMMDD*）是一个安全补丁。安全补丁不包括任何可能更改引擎行为的修复程序。

要识别数据库的 Amazon RDS 版本号，必须先使用以下命令创建 `rds_tools` 扩展：

```
CREATE EXTENSION rds_tools;
```

您可以通过以下 SQL 查询找出 RDS for MariaDB 数据库的 RDS 版本号：

```
mysql> select mysql.rds_version();
```

例如，查询 RDS for MariaDB 10.6.14 数据库将返回以下输出：

```
+---------------------+
| mysql.rds_version() |
+---------------------+
| 10.6.14.R2.20231201  |
+---------------------+
1 row in set (0.01 sec)
```

# RDS for MariaDB 的主要版本升级
<a name="USER_UpgradeDBInstance.MariaDB.Major"></a>

主要的版本升级可能包含未与现有应用程序向后兼容的数据库更改。因此，Amazon RDS 不会自动应用主要版本升级。您必须手动修改数据库实例。建议您在将任何升级应用于生产实例前全面测试这些升级。

**注意**  
在 MariaDB 11.8 中，`require_secure_transport` 的默认值现为 `1`，需要安全的 SSL/TLS 连接。如果需要非安全连接，则设置为 `0`。

Amazon RDS 支持 MariaDB 数据库引擎的以下主要版本就地升级：
+ 任何 MariaDB 版本到 MariaDB 11.8
+ 任何 MariaDB 版本到 MariaDB 11.4
+ 任何 MariaDB 版本到 MariaDB 10.11
+ 任何 MariaDB 版本到 MariaDB 10.6
+ MariaDB 10.4 到 MariaDB 10.5

如果使用的是自定义参数组并且要执行主要版本升级，则必须为新的数据库引擎版本指定默认参数组，或者为其创建自定义参数组。在完成升级后，将新的参数组与数据库实例关联需要重新启动客户启动的数据库。如果需要重新启动该实例来应用参数组更改，则该实例的参数组状态将显示 `pending-reboot`。可在 AWS 管理控制台 中查看实例的参数组状态，或者通过运行“describe”调用进行查看，例如 `describe-db-instances`。

## 升级 MariaDB 数据库实例
<a name="USER_UpgradeDBInstance.MariaDB.Upgrading"></a>

有关手动或自动升级 MariaDB 数据库实例的信息，请参阅[升级数据库实例 引擎版本](USER_UpgradeDBInstance.Upgrading.md)。

# RDS for MariaDB 的自动次要版本升级
<a name="USER_UpgradeDBInstance.MariaDB.Minor"></a>

如果在创建或修改数据库实例时指定以下设置，则可以让数据库实例自动升级。
+ **自动次要版本升级**设置已启用。
+ **备份保留期**设置需大于 0。

在 AWS 管理控制台 中，这些设置位于 **Additional configuration**（其他配置）下。下图显示了 **Auto minor version upgrade**（自动次要版本升级）设置。

![\[自动次要版本升级设置\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/amvu.png)


有关这些设置的更多信息，请参阅 [数据库实例的设置](USER_ModifyInstance.Settings.md)。

对于某些 AWS 区域中的某些 RDS for MariaDB 主要版本，RDS 将一个次要版本指定为自动升级版本。在 Amazon RDS 测试并批准次要版本后，将在维护时段内自动进行次要版本升级。RDS 不会自动将发布的较新次要版本设置为自动升级版本。在 RDS 指定较新的自动升级版本之前，将会考虑一些条件，例如：
+ 已知的安全问题
+ MariaDB 社群版本中的错误
+ 发布次要版本后的整体队列稳定性

**注意**  
从 MariaDB 的特定次要版本开始，已删除对使用 TLS 版本 1.0 和 1.1 的支持。有关支持的 MariaDB 次要版本的信息，请参阅[Amazon RDS 上 MariaDB 数据库实例的 SSL/TLS 支持](MariaDB.Concepts.SSLSupport.md)。

您可以运行以下 AWS CLI 命令来确定特定 AWS 区域中指定 MariaDB 次要版本的当前自动次要版本升级目标版本。

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
--engine mariadb \
--engine-version minor_version \
--region region \
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \
--output text
```

对于 Windows：

```
aws rds describe-db-engine-versions ^
--engine mariadb ^
--engine-version minor_version ^
--region region ^
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^
--output text
```

例如，以下 AWS CLI 命令确定美国东部（俄亥俄州）AWS 区域（us-east-2）中 MariaDB 次要版本 10.5.16 的自动次要版本升级目标。

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-engine-versions \
--engine mariadb \
--engine-version 10.5.16 \
--region us-east-2 \
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \
--output table
```

对于 Windows：

```
aws rds describe-db-engine-versions ^
--engine mariadb ^
--engine-version 10.5.16 ^
--region us-east-2 ^
--query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^
--output table
```

输出类似于以下内容。

```
----------------------------------
|    DescribeDBEngineVersions    |
+--------------+-----------------+
|  AutoUpgrade |  EngineVersion  |
+--------------+-----------------+
|  True        |  10.5.17        |
|  False       |  10.5.18        |
|  False       |  10.5.19        |
|  False       |  10.6.5         |
|  False       |  10.6.7         |
|  False       |  10.6.8         |
|  False       |  10.6.10        |
|  False       |  10.6.11        | 
|  False       |  10.6.12        |
+--------------+-----------------+
```

在此示例中，`AutoUpgrade` 值对于 MariaDB 版本 10.5.17 为 `True`。因此，自动次要版本升级目标是 MariaDB 版本 10.5.17，它在输出中突出显示。

如果满足以下条件，则会在维护时段内自动升级 MariaDB 数据库实例：
+ **自动次要版本升级**设置已启用。
+ **备份保留期**设置需大于 0。
+ 数据库实例运行的次要数据库引擎版本低于当前的自动升级次要版本。

有关更多信息，请参阅“[自动升级次要引擎版本](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades)”。

# 使用只读副本在升级 RDS for MariaDB 数据库时减少停机时间
<a name="USER_UpgradeDBInstance.MariaDB.ReducedDowntime"></a>

在大多数情况下，蓝绿部署是升级 MariaDB 数据库实例时减少停机时间的最佳选择。有关更多信息，请参阅 [使用 Amazon RDS 蓝绿部署进行数据库更新](blue-green-deployments.md)。

如果您无法使用蓝绿部署，并且 MariaDB 数据库实例当前与生产应用程序结合使用，则可使用以下过程来升级数据库实例的数据库版本。此过程可以减少应用程序的停机时间。

使用只读副本，您可以提前执行大多数维护步骤，并在实际停机期间尽量减少必要的更改。利用此技巧，您可以在不对现有数据库实例进行任何更改的情况下测试和准备新的数据库实例。

以下过程显示了从 MariaDB 版本 10.5 升级到 MariaDB 版本 10.6 的示例。您可以使用相同的常规步骤升级到其他主要版本。

**在使用数据库实例时升级 MariaDB 数据库**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 创建 MariaDB 10.5 数据库实例的只读副本。该过程可创建数据库的可升级副本。可能还存在数据库实例的其他只读副本。

   1. 在控制台上，选择**数据库**，然后选择您要升级的数据库实例。

   1. 对于 **Actions (操作)**，选择 **Create read replica (创建只读副本)**。

   1. 为只读副本提供 **DB instance identifier**（数据库实例标识符）的值，并确保 **DB instance class**（数据库实例类）和其他设置与您的 MariaDB 10.5 数据库实例匹配。

   1. 选择 **Create read replica (创建只读副本)**。

1. （可选）创建只读副本且**状态**显示为**可用**之后，将只读副本转换为多可用区部署并启用备份。

   默认情况下，只读副本将创建为已禁用备份的单可用区部署。由于只读副本最终成为生产数据库实例，因此最佳实践是立即配置多可用区部署并启用备份。

   1. 在控制台上，选择**数据库**，然后选择您刚创建的只读副本。

   1. 选择**修改**。

   1. 对于**多可用区部署**，请选择**创建备用实例**。

   1. 对于 **Backup Retention Period**（备份保留期），请选择正的非零值（如 3 天），然后选择 **Continue**（继续）。

   1. 对于**修改计划**，选择**立即应用**。

   1. 选择**修改数据库实例**。

1. 当只读副本 **Status**（状态）显示 **Available**（可用）后，将只读副本升级到 MariaDB 10.6：

   1. 在控制台上，选择**数据库**，然后选择您刚创建的只读副本。

   1. 选择**修改**。

   1. 对于 **DB engine version**（数据库引擎版本），选择要升级到的 MariaDB 10.6 版本，然后选择 **Continue**（继续）。

   1. 对于**修改计划**，选择**立即应用**。

   1. 选择 **Modify DB instance (修改数据库实例)**开始升级。

1. 升级完成并且 **Status**（状态）显示 **Available**（可用）之后，验证升级的只读副本是否与源 MariaDB 10.5 数据库实例保持同步。要进行验证，请连接到只读副本并运行 `SHOW REPLICA STATUS` 命令。如果 `Seconds_Behind_Master` 字段为 `0`，则复制保持最新。
**注意**  
以前的 MariaDB 版本使用的是 `SHOW SLAVE STATUS`，而不是 `SHOW REPLICA STATUS`。如果您使用的 MariaDB 版本低于 10.6，请使用 `SHOW SLAVE STATUS`。

1. （可选）创建只读副本的只读副本。

   如果您希望数据库实例在提升为独立数据库实例后拥有只读副本，则可以立即创建只读副本。

   1. 在控制台上，选择**数据库**，然后选择您刚刚升级的只读副本。

   1. 对于 **Actions (操作)**，选择 **Create read replica (创建只读副本)**。

   1. 为只读副本提供 **DB instance identifier**（数据库实例标识符）的值，并确保 **DB instance class**（数据库实例类）和其他设置与您的 MariaDB 10.5 数据库实例匹配。

   1. 选择 **Create read replica (创建只读副本)**。

1. （可选）为只读副本配置自定义数据库参数组。

   如果您希望数据库实例在提升为独立数据库实例后使用自定义参数组，则可以立即创建数据库参数组，并将其与只读副本相关联。

   1. 为 MariaDB 10.6 创建自定义数据库参数组。有关说明，请参阅 [在 Amazon RDS 中创建数据库参数组](USER_WorkingWithParamGroups.Creating.md)。

   1. 修改要在刚创建的数据库参数组中更改的参数。有关说明，请参阅[在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

   1. 在控制台中，选择**数据库**，然后选择只读副本。

   1. 选择**修改**。

   1. 对于 **DB parameter group**（数据库参数组），请选择刚创建的 MariaDB 10.6 数据库参数组，然后选择 **Continue**（继续）。

   1. 对于**修改计划**，选择**立即应用**。

   1. 选择 **Modify DB instance (修改数据库实例)**开始升级。

1. 使您的 MariaDB 10.6 只读副本成为独立的数据库实例。
**重要**  
将 MariaDB 10.6 只读副本提升为独立的数据库实例后，它不再是 MariaDB 10.5 数据库实例的副本。建议您在源 MariaDB 10.5 数据库实例处于只读模式并且所有写入操作都暂停的维护时段期间，提升 MariaDB 10.6 只读副本。提升完成之后，您可以将写入操作定向到已升级的 MariaDB 10.6 数据库实例，以确保不会丢失写入操作。  
此外，建议您在提升 MariaDB 10.6 只读副本之前，对 MariaDB 10.6 只读副本执行所有必需的数据定义语言（DDL）操作。例如，创建索引。此方法可避免在提升 MariaDB 10.6 只读副本之后对其性能造成任何负面影响。要提升只读副本，请使用以下过程。

   1. 在控制台上，选择**数据库**，然后选择您刚刚升级的只读副本。

   1. 对于**操作**，请选择**提升**。

   1. 选择**是**，为只读副本实例启用自动备份。有关更多信息，请参阅“[备份简介](USER_WorkingWithAutomatedBackups.md)”。

   1. 选择 **Continue (继续)**。

   1. 选择 **Promote Read Replica**。

1. 您现在有了 MariaDB 数据库的升级版本。此时，您可以将应用程序定向到新的 MariaDB 10.6 数据库实例。

# 使用事件监控 RDS for MariaDB 数据库引擎升级
<a name="USER_UpgradeDBInstance.MariaDB.Monitoring"></a>

在升级 RDS for MariaDB 数据库的引擎版本时，Amazon RDS 在流程的每个阶段都会发出一个特定的事件。要跟踪升级进度，您可以查看或订阅这些事件。

 有关 RDS 事件的更多信息，请参阅[监控 Amazon RDS 事件](working-with-events.md)。

有关引擎升级期间发生的特定 Amazon RDS 事件的详细信息，请参阅[Amazon RDS 事件类别和事件消息](USER_Events.Messages.md)。

# 升级 MariaDB 数据库快照引擎版本
<a name="mariadb-upgrade-snapshot"></a>

借助 Amazon RDS，您可以为 MariaDB 数据库实例创建存储卷数据库快照。创建数据库快照时，快照基于数据库实例使用的引擎版本。您可以升级数据库快照的引擎版本。

对于 RDS for MariaDB，您可以升级到所有可用的引擎版本。您可以升级加密或未加密的数据库快照。

要查看 RDS for MariaDB 数据库快照的可用引擎版本，请使用以下 AWS CLI 示例。

```
aws rds describe-db-engine-versions --engine mariadb --include-all --engine-version example-engine-version --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text
```

如果您看不到快照的结果，表明您的引擎版本可能已被弃用。如果您的引擎版本被弃用，我们建议您升级到最新的主要版本升级目标或该版本的其它可用升级目标之一。有关更多信息，请参阅 [使用 RDS for MariaDB 不支持的引擎版本的数据库快照的升级选项](mariadb-upgrade-snapshot.upgrade-options.md)。

将升级到新引擎版本的数据库快照还原后，请确保测试升级是否成功。有关主要版本升级的更多信息，请参阅[升级 MariaDB 数据库引擎](USER_UpgradeDBInstance.MariaDB.md)。要了解如何还原数据库快照，请参阅 [还原到数据库实例](USER_RestoreFromSnapshot.md)。

**注意**  
您无法升级在自动备份过程中创建的自动数据库快照。

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 升级数据库快照。

------
#### [ Console ]

要使用 AWS 管理控制台升级数据库快照引擎版本，请使用以下过程。

**升级数据库快照**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**快照**。

1. 选择要升级的快照。

1. 对于 **Actions (操作)**，选择 **Upgrade snapshot (升级快照)**。此时会显示 **Upgrade snapshot (升级快照)** 页面。

1. 选择要升级到的 **New engine version (新引擎版本)**。

1. 选择 **Save changes (保存更改)** 以升级快照。

   在升级过程中，将为此数据库快照禁用所有快照操作。此外，数据库快照状态由**可用**变为**正在升级**，完成后变为**活动**。如果由于快照损坏问题导致无法升级数据库快照，状态将变为**不可用**。此状态的快照无法恢复。
**注意**  
如果数据库快照升级失败，则快照将回滚到具有原始版本的原始状态。

------
#### [ AWS CLI ]

要将数据库快照升级到新的数据库引擎版本，请运行 AWS CLI [modify-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-snapshot.html) 命令。

**选项**
+ `--db-snapshot-identifier` – 要升级的数据库快照的标识符。标识符必须是唯一的 Amazon 资源名称 (ARN)。有关更多信息，请参阅“[Amazon RDS 中的 Amazon 资源名称（ARN）](USER_Tagging.ARN.md)”。
+ `--engine-version` – 升级后的数据库快照的引擎版本。

**Example**  
对于 Linux、macOS 或 Unix：  

```
1. aws rds modify-db-snapshot \
2. 
3.     --db-snapshot-identifier my_db_snapshot \
4.     --engine-version new_version
```
对于：Windows  

```
1. aws rds modify-db-snapshot ^
2.     --db-snapshot-identifier my_db_snapshot ^
3.     --engine-version new_version
```

------
#### [ Amazon RDS API ]

要将数据库快照升级到新的数据库引擎版本，请调用 RDS API [ModifyDBSnapshot](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBSnapshot.html) 操作。

**参数**
+ `DBSnapshotIdentifier` – 要升级的数据库快照的标识符。标识符必须是唯一的 Amazon 资源名称 (ARN)。有关更多信息，请参阅“[Amazon RDS 中的 Amazon 资源名称（ARN）](USER_Tagging.ARN.md)”。
+ `EngineVersion` – 升级后的数据库快照的引擎版本。

------

# 使用 RDS for MariaDB 不支持的引擎版本的数据库快照的升级选项
<a name="mariadb-upgrade-snapshot.upgrade-options"></a>

下表显示了可以从 RDS for MariaDB 数据库快照不支持的引擎版本升级到哪些引擎版本。

**注意**  
您可能需要多次升级数据库快照，才能升级到所选的引擎版本。


| 数据库快照引擎版本 | 可供升级的引擎版本 | 
| --- | --- | 
| 10.0.17、10.0.24、10.0.28、10.0.31、10.0.32、10.0.34、10.0.35 |  10.0.38、10.1.48、10.6.19、10.6.20、10.11.9、10.11.10、11.4.3、11.4.4、11.8.3  | 
| 10.1.14、10.1.16、10.1.19、10.1.23、10.1.26、10.1.31、10.1.34 |  10.1.48、10.2.44、10.6.19、10.6.20、10.11.9、10.11.10、11.4.3、11.4.4、11.8.3  | 
| 10.2.11、10.2.12、10.2.15、10.2.21、10.2.32、10.2.37、10.2.39、10.2.40、10.2.41、10.2.43 |  10.2.44、10.3.39、10.6.19、10.6.20、10.6.21、10.11.9、10.11.10、10.11.11、11.4.3、11.4.4、11.8.3  | 
| 10.3.8、10.3.13、10.3.20、10.3.23、10.3.28、10.3.31、10.3.32 |  10.3.39、10.4.34、10.6.19、10.6.20、10.6.21、10.11.9、10.11.10、10.11.11、11.4.3、11.4.4、11.8.3  | 
| 10.4.8 |  10.4.34、10.5.16、10.5.17、10.5.18、10.5.20、10.5.21、10.5.22、10.5.23、10.5.24、10.5.25、10.5.26、10.5.27、10.5.28、10.6.8、10.6.10、10.6.11、10.6.13、10.6.14、10.6.15、10.6.16、10.6.18、10.6.19、10.6.20、10.6.21、10.11.4、10.6.17、10.11.5、10.11.6、10.11.7、10.11.8、10.11.9、10.11.10、10.11.11  | 

# 将数据导入到 Amazon RDS for MariaDB 数据库实例
<a name="MariaDB.Procedural.Importing"></a>

您可以使用多种不同的技术将数据导入到 RDS for MariaDB 数据库实例。最佳方法取决于多种因素：
+ 数据的来源
+ 数据量
+ 一次性导入，还是持续导出
+ 停机时间量

 如果还要随数据一起迁移应用程序，则务必考虑停机时间量。

下表中列出了用于将数据导入到 RDS for MariaDB 数据库实例的技巧：

**注意**  
Amazon RDS 不支持 `mariadb-backup`，也不支持为 MariaDB 从 Amazon S3 进行导入。


| 来源 | 数据量 | 一次性或持续 | 应用程序停机时间 | 方法 | 更多信息 | 
| --- | --- | --- | --- | --- | --- | 
|  本地或 Amazon EC2 上的现有 MariaDB 数据库  |  任何  |  持续  |  Minimal  |  配置复制，使用现有 MariaDB 数据库作为复制源。 当外部实例为 MariaDB 版本 10.0.24 或更高版本时，您可以使用 MariaDB 全局事务标识符 (GTID) 配置复制到 MariaDB 数据库实例，对于 10.0.24 之前的版本，则可以使用 MariaDB 实例的二进制日志坐标来完成该操作。MariaDB GTID 与 MySQL GTID 的实施不同，后者不受 Amazon RDS 支持。  |  [配置与外部源实例之间的二进制日志文件位置复制](MySQL.Procedural.Importing.External.ReplMariaDB.md) [将数据导入到 Amazon RDS for MariaDB 数据库实例并减少停机时间](mariadb-importing-data-reduced-downtime.md)  | 
|  任何现有数据库  |  任何  |  一次性或持续  |  最低  |  使用 AWS Database Migration Service 可在最少停机时间下迁移数据库，对于很多数据库引擎，将继续进行持续复制。  |  *AWS Database Migration Service 用户指南*中的[什么是 AWS Database Migration Service](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 和[将与 MySQL 兼容的数据库作为 AWS DMS 的目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)  | 
|  现有 MariaDB 数据库实例  |  任何  |  一次性或持续  |  最低  |  为正在进行的复制创建只读副本。提升只读副本用于一次性创建新数据库实例。  |  [使用数据库实例只读副本](USER_ReadRepl.md)  | 
|  现有 MariaDB 数据库  |  小型  |  一次性  |  一段时间  |  使用命令行实用程序，将数据直接复制到您的 MariaDB 数据库实例。  |  [将数据从外部 MariaDB 数据库导入到 Amazon RDS for MariaDB 数据库实例](mariadb-importing-data-external-database.md)  | 
|  未存储在现有数据库中的数据  |  中  |  一次性  |  一段时间  |  使用 MariaDB `LOAD DATA LOCAL INFILE` 语句创建平面文件并导入这些文件。  |  [从任意源将数据导入 Amazon RDS for MariaDB 数据库实例](mariadb-importing-data-any-source.md)  | 

**注意**  
`mysql` 系统数据库包含登录到数据库实例并访问数据所需的身份验证和授权信息。在数据库实例中删掉、改动、重命名或截取 `mysql` 数据库中的表、数据或其他内容可能会导致错误，并可能导致无法访问数据库实例和数据。如果发生此情况，您可以使用 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) 命令从快照中还原数据库实例。您可以使用 [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-to-point-in-time.html) 命令恢复数据库实例。

# 为 MariaDB 导入数据的注意事项
<a name="MariaDB.Procedural.Importing.Advanced"></a>

以下内容包含与将数据加载到 MariaDB 中相关的技术信息。此内容面向熟悉 MariaDB 服务器架构的用户。

## 二进制日志记录
<a name="MariaDB.Procedural.Importing.Advanced.Log"></a>

与禁用日志记录相比，启用二进制日志记录会降低数据加载性能，并且需要多达四倍的额外磁盘空间。用于加载数据的事务大小直接影响系统性能和磁盘空间需求，也即，事务越大，需要的资源越多。

## 事务大小
<a name="MariaDB.Procedural.Importing.Advanced.Size"></a>

事务大小会影响 MariaDB 数据加载的以下方面：
+ 资源消耗
+ 磁盘空间利用率
+ 恢复进程
+ 恢复时间
+ 输入格式（平面文件或 SQL）

本部分介绍了事务大小如何影响二进制日志记录以及让案例在大数据加载过程中禁用二进制日志记录。可以通过设置 Amazon RDS 自动备份保留期来启用和禁用二进制日志记录。非零值会启用二进制日志记录，零会将其禁用。有关更多信息，请参阅 [备份保留期](USER_WorkingWithAutomatedBackups.BackupRetention.md)。

本节还介绍大型事务对 InnoDB 的影响以及将事务大小保持为较小的重要性。

### 小型事务
<a name="MariaDB.Procedural.Importing.Advanced.Log.Small"></a>

对于小型事务，二进制日志记录会使加载数据所需的磁盘写入次数翻倍。这种影响会严重降低其他数据库会话的性能，并增加数据加载所需的时间。所经历的降级在一定程度上取决于以下因素：
+ 上传速率
+ 在加载期间发生的其它数据库活动
+ Amazon RDS 数据库实例的容量

此外，二进制日志占用的磁盘空间大致等于加载的数据量，直至备份和移除日志。Amazon RDS 通过频繁备份和移除二进制日志来尽量减少占用的磁盘空间量。

### 大型事务
<a name="MariaDB.Procedural.Importing.Advanced.Log.Large"></a>

对于大型事务，二进制日志记录会使 IOPS 和磁盘使用量增加两倍，原因如下：
+ 二进制日志缓存将事务数据临时存储在磁盘上。
+ 此缓存会随着事务大小而增长，这会占用磁盘空间。
+ 当事务（提交或回滚）完成时，系统会将缓存复制到二进制日志。

此过程会创建数据的三个副本：
+ 原始数据
+ 磁盘上的缓存
+ 最终二进制日志条目

每个写入操作都会产生额外的 IO，从而进一步影响性能。

因此，与禁用日志记录相比，二进制日志记录需要三倍的磁盘空间。例如，在单个事务中加载 10 GiB 的数据会创建三个副本：
+ 表数据为 10 GiB
+ 二进制日志缓存为 10 GiB
+ 二进制日志文件为 10 GiB

所需的临时磁盘空间总量为 30 GiB。

磁盘空间重要注意事项：
+ 缓存文件会一直存在，直到会话结束或新事务创建另一个缓存。
+ 二进制日志会保留直至对其进行备份，可能会在很长一段时间内占用 20 GiB（缓存和日志）。

如果您使用 `LOAD DATA LOCAL INFILE` 来加载数据，数据恢复会创建第四个副本，以防数据库必须从加载前进行的备份中恢复。在恢复期间，MariaDB 将二进制日志中的数据提取到平面文件中。然后，MariaDB 运行 `LOAD DATA LOCAL INFILE`。在前一个示例的基础上，此恢复需要的临时磁盘空间总量为 40 GiB，也即表、缓存、日志和本地文件各为 10 GiB。如果没有至少 40 GiB 的可用磁盘空间，则恢复将失败。

### 优化大数据加载
<a name="MariaDB.Procedural.Importing.AnySource.Advanced.Disable"></a>

对于大数据加载，请禁用二进制日志记录，以减少开销和磁盘空间要求。可以通过将备份保留期设置为 0 来禁用二进制日志记录。完成加载后，将备份保留期还原为适当的非零值。有关更多信息，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)和设置表中的[备份保留期](USER_ModifyInstance.Settings.md)。

**注意**  
如果数据库实例是只读副本的源数据库实例，则您无法将备份保留期设置为 0。

在加载数据之前，我们建议您创建数据库快照。有关更多信息，请参阅 [管理手动备份](USER_ManagingManualBackups.md)。

## InnoDB
<a name="MariaDB.Procedural.Importing.Advanced.InnoDB"></a>

以下有关撤消日志记录和恢复选项的信息支持将 InnoDB 事务保持为较小，以优化数据库性能。

### 了解 InnoDB 撤消日志记录
<a name="MariaDB.Procedural.Importing.Advanced.InnoDB.Undo"></a>

撤消是一种日志记录机制，可启用事务回滚并支持多版本并发控制（MVCC）。

对于 MariaDB 10.11 及更低版本，撤消日志存储在 InnoDB 系统表空间（通常为 ibdata1）中，并保留至清除线程移除它们为止。因此，大数据加载事务可能会导致系统表空间变得相当大，并占用磁盘空间，除非重新创建数据库，否则无法回收这些磁盘空间。

对于所有 MariaDB 版本，清除线程必须等待以移除所有撤消日志，直到最旧的活动事务提交或回滚。如果数据库在加载过程中正在处理其它事务，则其撤消日志也会累积并且无法移除，即使事务提交并且没有其它事务需要 MVCC 的撤消日志，也是如此。在这种情况下，所有事务（包括只读事务）都会变慢。之所以发生这种变慢过程，是因为所有事务都访问任何事务（而不仅仅是加载事务）更改的所有行。实际上，事务必须扫描一些撤消日志，在撤消日志清理期间，长时间运行的加载事务已阻止清除这些撤消日志。这会影响访问已修改行的任何操作的性能。

### InnoDB 事务恢复选项
<a name="MariaDB.Procedural.Importing.Advanced.InnoDB.Rollback"></a>

尽管 InnoDB 优化了提交操作，但大型事务回滚速度很慢。为了加快恢复速度，请执行时间点故障恢复或还原数据库快照。有关更多信息，请参阅[时间点故障恢复](USER_PIT.md)和[还原到数据库实例](USER_RestoreFromSnapshot.md)。

## 数据导入格式
<a name="MariaDB.Procedural.Importing.Advanced.InputFormat"></a>

MariaDB 支持两种数据导入格式：平面文件和 SQL。查看有关每种格式的信息，以确定最适合您需求的选项。

### 平面文件
<a name="MariaDB.Procedural.Importing.Advanced.InputFormat.FlatFiles"></a>

对于小型事务，请使用 `LOAD DATA LOCAL INFILE` 加载平面文件。与使用 SQL 相比，这种数据导入格式具有以下优势：
+ 减少网络流量
+ 降低数据传输成本
+ 减少了数据库处理开销
+ 处理速度更快

`LOAD DATA LOCAL INFILE` 会将整个平面文件作为一个事务进行加载。将各个文件的大小保持为较小可获得以下优势：
+ **恢复功能**：可以保持跟踪哪些文件已加载。如果在加载期间出现问题，可以从停止处继续加载。可能需要将一些数据重新传输到 Amazon RDS，但使用小文件，就可以将重新传输的量减少至最低水平。
+ **并行数据加载**：如果 IOPS 和网络带宽足以支持单个文件加载，那么并行加载就可以节省时间。
+ **加载速率控制**：如果数据加载对其它进程产生负面影响，则可以通过增加文件之间的间隔来控制加载速率。

大型事务会降低使用 `LOAD DATA LOCAL INFILE` 导入数据的优势。当您无法将大量数据分解成较小的文件时，可以考虑使用 SQL。

### SQL
<a name="MariaDB.Procedural.Importing.Advanced.InputFormat.SQL"></a>

与平面文件相比，SQL 的一个主要优势为：您可以轻松地将事务大小保持为较小。但是，SQL 的加载时间可能比平面文件长得多。此外，在发生故障后，可能难以确定从哪里恢复，而您无法重新启动 mariadb-dump 文件。如果加载 mariadb-dump 文件时发生故障，则必须在加载可以恢复前修改或替换该文件。或者，在纠正故障的原因后，您可以恢复到加载前的时间点，并重新发送该文件。有关更多信息，请参阅 [时间点故障恢复](USER_PIT.md)。

## 使用 Amazon RDS 数据库快照提供数据库检查点
<a name="MariaDB.Procedural.Importing.Advanced.Checkpoints"></a>

如果您在没有二进制日志记录的情况下长时间（如数小时或数天）加载数据，请使用数据库快照提供定期检查点来实现数据安全。每个数据库快照都会创建数据库实例的一致副本，该副本在系统故障或数据损坏事件期间用作恢复点。由于数据库快照速度很快，因此频繁的检查点对加载性能的影响微乎其微。您可以在不影响数据库持久性或恢复能力的情况下，删除以前的数据库快照。有关数据库快照的更多信息，请参阅[管理手动备份](USER_ManagingManualBackups.md)。

## 减少数据库加载时间
<a name="MariaDB.Procedural.Importing.Advanced.LoadTime"></a>

以下各项是减少加载时间的其它技巧：
+ 在将数据加载到 MariaDB 数据库之前，请创建所有二级索引。与其它数据库系统不同，MariaDB 在添加或修改二级索引时会重建整个表。此过程会创建一个包含索引更改的新表，复制所有数据，然后删除原始表。
+ 按主键顺序加载数据。对于 InnoDB 表，这可以将加载时间缩短 75% 至 80%，并将数据文件大小减少 50%。
+ 通过将 `foreign_key_checks` 设置为 `0` 来禁用外键约束。对于使用 `LOAD DATA LOCAL INFILE` 加载的平面文件，这通常是必需的。对于任何加载，禁用外键检查会加快数据加载速度。加载完成后，通过将 `foreign_key_checks` 设置为 `1` 来重新启用约束并验证数据。
+ 并行加载数据，除非接近资源限制。要实现跨多个表段的并行加载，请在适当时使用分区表。
+ 要减少 SQL 执行开销，请将多条 `INSERT` 语句合并为单个多值 `INSERT` 操作。`mariadb-dump` 自动实现此优化。
+ 通过将 `innodb_flush_log_at_trx_commit` 设置为 `0` 来减少 InnoDB 日志 IO 操作。加载完成后，将 `innodb_flush_log_at_trx_commit` 还原为 `1`。
**警告**  
将 `innodb_flush_log_at_trx_commit` 设置为 `0` 会导致 InnoDB 每秒都刷新其日志，而不是在每次提交时刷新。此设置可以提高性能，但在系统故障期间可能会有事务丢失的风险。
+ 如果您要将数据加载到没有只读副本的数据库实例，请将 `sync_binlog` 设置为 `0`。加载完成后，将 `sync_binlog parameter` 还原为 `1`。
+ 在将数据库实例转换为多可用区部署之前，将数据加载到单可用区实例中。如果数据库实例已经使用多可用区部署，我们建议您不要切换为单可用区部署来加载数据。这样做所带来的改进微不足道

# 将数据从外部 MariaDB 数据库导入到 Amazon RDS for MariaDB 数据库实例
<a name="mariadb-importing-data-external-database"></a>

您可以将数据从现有 MariaDB 数据库导入到 RDS for MariaDB 数据库实例。为此，请使用 [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 或 [mariadb-dump](https://mariadb.com/kb/en/mariadb-dump/) 复制数据库，然后通过管道将数据库直接传输到 RDS for MariaDB 数据库实例。`mysqldump` 或 `mariadb-dump` 命令行实用程序通常用于创建备份以及在 MariaDB 服务器之间传输数据。该实用程序包含在 MariaDB 客户端软件中。

从 MariaDB 11.0.1 开始，您必须使用 `mariadb-dump` 而不是 `mysqldump`。

将数据从外部数据库移动到 Amazon RDS 数据库实例的典型 `mysqldump` 命令类似以下示例。将值替换为您自己的信息。对于 MariaDB 11.0.1 及更高版本，请将 `mysqldump` 替换为 `mariadb-dump`。

```
mysqldump -u local_user \
    --databases database_name \
    --single-transaction \
    --compress \
    --order-by-primary  \
    --routines=0 \
    --triggers=0 \
    --events=0 \
    -plocal_password | mariadb -u RDS_user \
        --port=port_number \
        --host=host_name \
        -pRDS_password
```

**重要**  
确保 `-p` 选项和输入的密码之间不留空格。  
作为安全最佳实践，请指定此示例中显示的提示以外的凭证。

确保您了解以下建议和注意事项：
+ 从转储文件中排除以下架构：
  + `sys`
  + `performance_schema`
  + `information_schema`

  默认情况下，`mysqldump` 和 `mariadb-dump` 实用程序排除这些架构。
+ 如果您需要迁移用户和权限，请考虑使用生成数据控制语言 (DCL) 的工具 (如 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 实用程序) 来重新创建用户和权限。
+ 要执行导入，请确保执行此操作的用户有权访问数据库实例。有关更多信息，请参阅 [使用安全组控制访问权限](Overview.RDSSecurityGroups.md)。

所用参数如下所示：
+ `-u local_user` – 用于指定用户名。在第一次使用该参数时，请指定您使用 `--databases` 参数确定的本地 MariaDB 数据库中的用户账户名称。
+ `--databases database_name`：用于指定本地 MariaDB 实例上您要导入 Amazon RDS 的数据库的名称。
+ `--single-transaction` – 用于确保从本地数据库加载的所有数据都与单一时间点保持一致。如果在 `mysqldump` 或 `mariadb-dump` 读取数据期间有其他进程更改数据，使用该参数有助于保持数据完整性。
+ `--compress` – 用于降低网络带宽消耗，方式为将数据从本地数据库发送到 Amazon RDS 之前压缩数据。
+ `--order-by-primary` – 用于减少加载时间，方式为根据主键对每个表中的数据进行排序。
+ `--routines`：如果您要复制的数据库中存在诸如存储过程或函数之类的例程，则使用此参数。将此参数设置为 `0`，这将在导入过程中排除例程。稍后在 Amazon RDS 数据库中手动重新创建例程。
+ `--triggers`：如果要复制的数据库中存在触发器，则使用此参数。将此参数设置为 `0`，这将在导入过程中排除触发器。稍后在 Amazon RDS 数据库中手动重新创建触发器。
+ `--events`：如果要复制的数据库中存在事件，则使用此参数。将此参数设置为 `0`，这将在导入过程中排除事件。稍后在 Amazon RDS 数据库中手动重新创建事件。
+ `-plocal_password` – 用于指定密码。在第一次使用该参数时，请为您使用第一个 `-u` 参数标识的用户账户指定密码。
+ `-u RDS_user` – 用于指定用户名。在第二次使用该参数时，请为您使用 `--host` 参数标识的 MariaDB 数据库实例指定默认数据库上的用户账户的名称。
+ `--port port_number`：用于为您的 MariaDB 数据库实例指定端口。默认情况下该值为 3306，除非您在创建数据库实例时更改了该值。
+ `--host host_name` – 用于从 Amazon RDS 数据库实例端点指定域名系统 (DNS) 名称，例如，`myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可以在 Amazon RDS 控制台上的数据库实例详细信息中找到端点值。
+ `-pRDS_password` – 用于指定密码。在第二次使用该参数时，您为第二个 `-u` 参数确定的用户账户指定密码。

确保在 Amazon RDS 数据库中手动创建任何存储过程、触发器、函数或事件。如果您所复制的数据库中有上述任一对象，则在运行 `mysqldump` 或 `mariadb-dump` 时会排除这些对象。为此，使用 `mysqldump` 或 `mariadb-dump` 命令时请包含以下参数：
+ `--routines=0`
+ `--triggers=0`
+ `--events=0`

**示例**

以下示例将本地主机上的 `world` 示例数据库复制到 RDS for MariaDB 数据库实例中。将值替换为您自己的信息。

对于 Linux、macOS 或 Unix：

```
sudo mariadb-dump -u local_user \
    --databases world \
    --single-transaction \
    --compress \
    --order-by-primary  \
    --routines=0 \
    --triggers=0 \
    --events=0 \
    -plocal_password | mariadb -u rds_user \
        --port=3306 \
        --host=my_instance.123456789012.us-east-1.rds.amazonaws.com \
        -pRDS_password
```

对于：Windows

在已通过右键单击 Windows 程序菜单上的**命令提示符**并选择**以管理员身份运行**打开的命令提示符中，运行以下命令：将值替换为您自己的信息。

```
mariadb-dump -u local_user ^
    --databases world ^
    --single-transaction ^
    --compress ^
    --order-by-primary  ^
    --routines=0 ^
    --triggers=0 ^
    --events=0 ^
    -plocal_password | mariadb -u RDS_user ^
        --port=3306 ^
        --host=my_instance.123456789012.us-east-1.rds.amazonaws.com ^
        -pRDS_password
```

**注意**  
作为安全最佳实践，请指定示例中显示的提示以外的凭证。

# 将数据导入到 Amazon RDS for MariaDB 数据库实例并减少停机时间
<a name="mariadb-importing-data-reduced-downtime"></a>

有时，您可能需要将数据从支持活动应用程序的外部 MariaDB 数据库导入到 RDS for MariaDB 数据库实例。使用以下过程可最大程度地减小对应用程序可用性产生的影响。如果使用非常大的数据库，该步骤也很有用。使用该过程，您可以通过减少跨网络传送到 AWS 的数据量以降低导入成本。

在该过程中，您将数据库数据的副本传输到 Amazon EC2 实例，并将数据导入到新的 Amazon RDS 数据库中。然后，使用复制功能使 Amazon RDS 数据库与活动的外部实例保持同步，再将应用程序重新导向到 Amazon RDS 数据库。如果外部实例是 MariaDB 10.0.24 或更高版本，并且目标实例是 RDS for MariaDB，则基于全局事务标识符（GTID）配置 MariaDB 复制。否则，将基于二进制日志坐标配置复制。如果您的外部数据库支持基于 GTID 的复制，我们建议使用它，因为基于 GTID 复制是一种更可靠的方法。有关更多信息，请参阅 MariaDB 文档中的[全局事务处理 ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/)。

下图显示将外部 MariaDB 数据库导入到 Amazon RDS 上的 MariaDB 数据库。

![\[显示将外部 MariaDB 数据库导入到 Amazon RDS 上的 MariaDB 数据库的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_1.png)


## 任务 1：创建现有数据库的副本
<a name="mariadb-importing-data-reduced-downtime-copy-database"></a>

要将大量数据迁移到停机时间最少的 RDS for MariaDB 数据库，第一步是创建源数据的副本。

下图显示了创建 MariaDB 数据库的备份。

![\[显示创建 MariaDB 数据库的备份的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_2.png)


您可以使用 `mysqldump` 或 `mariadb-dump` 实用程序创建 SQL 或分隔的文本格式的数据库备份。在 MariaDB 10.5 中，客户端被称为 [mariadb-dump](https://mariadb.com/kb/en/mariadb-dump/)。从 MariaDB 11.0.1 开始，您必须使用 `mariadb-dump` 而不是 `mysqldump`。建议您在非生产环境中对每种格式运行测试，以便了解哪种方法能最大程度地减少 `mysqldump` 或 `mariadb-dump` 运行的时间。

我们还建议您对照将分隔文本格式用于加载所获得的好处来权衡 `mysqldump` 或 `mariadb-dump` 性能。使用分隔的文本格式的备份将为所转储的每个表创建制表符分隔的文本文件。为减少导入数据库所需的时间，您可以使用 `LOAD DATA LOCAL INFILE` 命令并行加载这些文件。有关更多信息，请参阅“从任意来源导入数据”过程中的[步骤 5：加载数据](mariadb-importing-data-any-source.md#mariadb-importing-data-any-source-load-data)。

在开始备份操作之前，确保对将复制到 Amazon RDS 的 MariaDB 数据库设置复制选项。复制选项包括开启二进制日志记录和设置唯一的服务器 ID。设置这些选项将促使您的服务器开始记录数据库事务，并做好在该过程的后面充当源复制实例的准备。

确保您了解以下建议和注意事项：
+ 将 `--single-transaction` 选项与 `mysqldump` 或 `mariadb-dump` 结合使用，因为它会转储数据库的一致状态。为确保转储文件有效，请勿在 `mysqldump` 或 `mariadb-dump` 运行时运行数据定义语言（DDL）语句。您可以为这些操作计划维护时段。
+ 从转储文件中排除以下架构：
  + `sys`
  + `performance_schema`
  + `information_schema`

  默认情况下，`mysqldump` 和 `mariadb-dump` 实用程序会排除这些架构。
+ 如果您需要迁移用户和权限，请考虑使用生成数据控制语言 (DCL) 的工具 (如 [pt-show-grants](https://www.percona.com/doc/percona-toolkit/LATEST/pt-show-grants.html) 实用程序) 来重新创建用户和权限。

### 设置复制选项
<a name="mariadb-importing-data-reduced-downtime-set-replication-options"></a>

1. 编辑 `my.cnf` 文件。此文件通常位于 `/etc` 下。

   ```
   sudo vi /etc/my.cnf
   ```

   将 `log_bin` 和 `server_id` 选项添加到 `[mysqld]` 节。`log_bin` 选项为二进制日志文件提供文件名标识符。`server_id` 选项为源-副本关系中的服务器提供唯一标识符。

   以下示例显示 `my.cnf` 文件已更新的 `[mariadb]` 部分：

   ```
   [mariadb]
   log-bin
   server-id=1 
   log-basename=master1
   binlog-format=mixed
   ```

   有关更多信息，请参阅 MariaDB 文档中的 [Setting the Replication Source Configuration](https://mariadb.com/docs/server/ha-and-performance/standard-replication/setting-up-replication)。

1. 要使用多可用区数据库集群进行复制，请启用`gtid_strict_mode`。有关更多信息，请参阅 MariaDB 文档中的[ gtid\$1strict\$1mode](https://mariadb.com/docs/server/ha-and-performance/standard-replication/gtid#gtid_strict_mode)。

   使用数据库实例进行复制不需要启用 `gtid_strict_mode`。

1. 重新启动 `mariadb` 服务。

   ```
   sudo service mariadb restart
   ```

### 创建现有数据库的备份副本
<a name="mariadb-importing-data-reduced-downtime-create-backup"></a>

1. 使用 `mysqldump` 或 `mariadb-dump` 实用程序创建数据的备份，并指定 SQL 或分隔文本格式。

   要提高性能和确保数据完整性，请对 `mysqldump` 和 `mariadb-dump` 使用 `--order-by-primary` 和 `--single-transaction` 选项。

   要避免在备份中包括 MySQL 系统数据库，请不要将 `--all-databases` 选项与 `mysqldump` 或 `mariadb-dump` 结合使用。有关更多信息，请参阅 MySQL 文档中的 [Creating a Data Snapshot Using mysqldump](https://dev.mysql.com/doc/mysql-replication-excerpt/8.0/en/replication-howto-mysqldump.html)。

   如有必要，可使用 `chmod` 来确保要在其中创建备份文件的目录是可写的。
**重要**  
在 Windows 中，以管理员身份运行命令窗口。
   + 要生成 SQL 输出，请使用以下命令。对于 MariaDB 10.11 及更低版本，请将 `mariadb-dump` 替换为 `mysqldump`。

     对于 Linux、macOS 或 Unix：

     ```
     sudo mariadb-dump \
         --databases database_name \
         --master-data=2  \
         --single-transaction \
         --order-by-primary \
         -r backup.sql \
         -u local_user \
         -ppassword
     ```
**注意**  
作为安全最佳实践，请指定示例中显示的提示以外的凭证。

     对于：Windows

     ```
     mariadb-dump ^
         --databases database_name ^
         --master-data=2  ^
         --single-transaction ^
         --order-by-primary ^
         -r backup.sql ^
         -u local_user ^
         -ppassword
     ```
**注意**  
作为安全最佳实践，请指定示例中显示的提示以外的凭证。
   + 要生成分隔的文本输出，请使用以下命令。对于 MariaDB 11.01 及更高版本，请将 `mysqldump` 替换为 `mariadb-dump`。

     对于 Linux、macOS 或 Unix：

     ```
     sudo mysqldump \
         --tab=target_directory \
         --fields-terminated-by ',' \
         --fields-enclosed-by '"' \
         --lines-terminated-by 0x0d0a \
         database_name \
         --master-data=2 \
         --single-transaction \
         --order-by-primary \
         -ppassword
     ```

     对于：Windows

     ```
     mysqldump ^
         --tab=target_directory ^
         --fields-terminated-by "," ^
         --fields-enclosed-by """ ^
         --lines-terminated-by 0x0d0a ^
         database_name ^
         --master-data=2 ^
         --single-transaction ^
         --order-by-primary ^
         -ppassword
     ```
**注意**  
作为安全最佳实践，请指定示例中显示的提示以外的凭证。  
确保在 Amazon RDS 数据库中手动创建任何存储过程、触发器、函数或事件。如果您所复制的数据库中有上述任一对象，则在运行 `mysqldump` 或 `mariadb-dump` 时会排除这些对象。为此，请在 `mysqldump` 或 `mariadb-dump` 命令中包含以下参数：  
`--routines=0`
`--triggers=0`
`--events=0`

     如果运行 `mysqldump` 并指定分隔的文本格式，将返回 `CHANGE MASTER TO` 注释。此注释包含主日志文件名称和位置。如果外部实例是 MariaDB 10.0.23 或更低版本，请注意 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 的值。设置复制时需要这些值。

     对于 MariaDB 版本，将返回以下输出。

     ```
     -- Position to start replication or point-in-time recovery from
     --
     -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
     ```

1. 如果您使用的外部实例是 MariaDB 10.0.24 或更高版本，请使用基于 GTID 的复制。在外部 MariaDB 实例上运行 `SHOW MASTER STATUS` 以获取二进制日志文件名称和位置，然后通过在外部 MariaDB 实例上运行 `BINLOG_GTID_POS` 将它们转换为 GTID。

   ```
   SELECT BINLOG_GTID_POS('binary_log_file_name', binary_log_file_position);
   ```

   请记下返回的 GTID。您需要此 GTID 来配置复制。

1. 压缩复制后的数据可减少将数据复制到 Amazon RDS 数据库所需的网络资源量。记下备份文件的大小。您在确定要创建的 Amazon EC2 实例的大小时需要此信息。完成操作后，请使用 GZIP 或您的首选压缩实用程序来压缩备份文件。
   + 要压缩 SQL 输出，请使用以下命令：

     ```
     gzip backup.sql
     ```
   + 要压缩分隔文本输出，请使用以下命令：

     ```
     tar -zcvf backup.tar.gz target_directory
     ```

## 任务 2：创建 Amazon EC2 实例和复制压缩的数据库
<a name="mariadb-importing-data-reduced-downtime-create-ec2-copy-database"></a>

将压缩的数据库备份文件复制到 Amazon EC2 实例所占用的网络资源少于直接在数据库实例之间复制未压缩的数据所占用的网络资源。当您的数据位于 Amazon EC2 中后，可以直接从中将数据复制到 MariaDB 数据库。要节省网络资源成本，您的 Amazon EC2 实例必须与 Amazon RDS 数据库实例位于同一 AWS 区域内。使 Amazon EC2 实例位于 Amazon RDS 数据库所在的相同 AWS 区域内，还可以减少导入期间的网络延迟。

下图显示了将数据库备份复制到 Amazon EC2 实例。

![\[显示将数据库备份复制到 Amazon EC2 实例的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_3.png)


### 创建 Amazon EC2 实例并复制数据
<a name="mariadb-importing-data-reduced-downtime-create-ec2"></a>

1. 在您打算在其中创建 Amazon RDS 数据库的 AWS 区域中，创建虚拟私有云（VPC）、VPC 安全组和 VPC 子网。确保您的 VPC 安全组的入站规则允许应用程序连接到 AWS 所需的 IP 地址。您可以指定一系列 IP 地址（例如 `203.0.113.0/24`）或另一个 VPC 安全组。可以使用 [Amazon VPC 控制台](https://console.aws.amazon.com/vpc)来创建和管理 VPC、子网和安全组。有关更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》**中的 [Amazon VPC 入门](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html#getting-started)。

1. 打开 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2)，并选择将包含 Amazon EC2 实例和 Amazon RDS 数据库的 AWS 区域。使用您在步骤 1 中创建的 VPC、子网和安全组来启动 Amazon EC2 实例。在数据库备份文件未压缩的情况下，确保为该文件选择具有足够存储空间的实例类型。有关 Amazon EC2 实例的详细信息，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[开始使用 Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

1.  要从 Amazon EC2 实例连接到 Amazon RDS 数据库，请编辑 VPC 安全组。添加指定 EC2 实例的私有 IP 地址的入站规则。您可以在 EC2 控制台窗口中的 **Instance** 窗格的 **Details** 选项卡上找到私有 IP 地址。要编辑 VPC 安全组并添加入站规则，请在 EC2 控制台导航窗格中选择 **Security Groups**（安全组），然后为 MySQL 或 Aurora 添加指定 EC2 实例的私有 IP 地址的入站规则。要了解如何向 VPC 安全组添加入站规则，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)。

1. 将压缩后的数据库备份文件从本地系统复制到 Amazon EC2 实例中。如有必要，可使用 `chmod` 来确保您具有 Amazon EC2 实例目标目录的写入权限。您可以使用 `scp` 或 Secure Shell (SSH) 客户端复制文件。以下命令是一个示例 `scp` 命令：

   ```
   scp -r -i key pair.pem backup.sql.gz ec2-user@EC2 DNS:/target_directory/backup.sql.gz
   ```
**重要**  
复制敏感数据时，务必使用安全网络传输协议。

1. 连接到 Amazon EC2 实例，并使用以下命令安装最新更新和 MariaDB 客户端工具：

   ```
   sudo yum update -y
   sudo yum install mariadb1011-client-utils -y
   ```

   有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[连接到您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)（适用于 Linux 实例）和 MariaDB 文档中的 [MariaDB Connectors](https://mariadb.com/docs/connectors)。

1. 在连接到 Amazon EC2 实例时，请解压缩数据库备份文件。下面是一些命令示例。
   + 要解压缩 SQL 输出，请使用以下命令：

     ```
     gzip backup.sql.gz -d
     ```
   + 要解压缩分隔的文本输出，请使用以下命令：

     ```
     tar xzvf backup.tar.gz
     ```

## 任务 3：创建 MariaDB 数据库，并从 Amazon EC2 实例导入数据
<a name="mariadb-importing-data-reduced-downtime-create-database-import-data"></a>

通过在 Amazon EC2 实例所在的同一 AWS 区域 内创建 RDS for MariaDB 数据库实例，可以从 Amazon EC2 更快地导入数据库备份文件，此方式快于通过互联网导入。

下图显示了将备份从 Amazon EC2 实例导入到 MariaDB 数据库。

![\[显示将备份从 EC2 实例导入到 MariaDB 数据库的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_4.png)


### 创建 MariaDB 数据库并导入数据
<a name="mariadb-importing-data-reduced-downtime-create-database"></a>

1. 确定支持此 Amazon RDS 数据库的预期工作负载所需的数据库实例类和存储空间量。作为过程的一部分，确定数据加载过程所需的足够空间量和处理能力。此外，确定处理生产工作负载所需的项目。可以根据源 MariaDB 数据库的大小和资源来进行估计。有关更多信息，请参阅 [数据库实例类](Concepts.DBInstanceClass.md)。

1. 在包含您的 Amazon EC2 实例的 AWS 区域中创建数据库实例。按照[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)中的说明操作并使用以下准则：
   + 指定与源数据库实例兼容的数据库引擎版本。
   + 指定用于 Amazon EC2 实例的相同虚拟私有云（VPC）和 VPC 安全组。此方式将确保 Amazon EC2 实例和 Amazon RDS 实例通过网络相互可见。确保您的数据库实例可公开访问。要按下一节所述设置源数据库的复制，您的数据库实例必须可公开访问。
   + 在导入数据库备份之前，不要配置多个可用区、备份保留或只读副本。在完成该导入操作后，您可以为生产实例配置多可用区和备份保留期。

1. 检查 Amazon RDS 数据库的默认配置选项。如果数据库的默认参数组没有所需的配置选项，请查找具有这些选项的参数组，或创建新的参数组。有关创建参数组的详细信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

1. 以主用户身份连接到新 Amazon RDS 数据库。创建为需要访问数据库实例的管理员、应用程序和服务提供支持所需的用户。Amazon RDS 数据库的主机名为此数据库实例的**端点**值（不包含端口号），例如 `mysampledb.123456789012.us-west-2.rds.amazonaws.com`。您可以在 Amazon RDS 控制台上的数据库详细信息中找到端点值。

1. 连接到 Amazon EC2 实例。有关更多信息，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[连接到您的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-connect-to-instance-linux)（适用于 Linux 实例）。

1. 使用 `mysql` 命令以远程主机身份从 Amazon EC2 实例连接到 Amazon RDS 数据库。以下命令是一个示例：

   ```
   mysql -h host_name -P 3306 -u db_master_user -p
   ```

   *host\$1name* 是 Amazon RDS 数据库端点。

1. 在 `mysql` 提示符下，运行 `source` 命令并向它传递您的数据库转储文件名。此命令将数据加载到 Amazon RDS 数据库实例。
   + 对于 SQL 格式，请使用以下命令：

     ```
     MariaDB [(none)]> source backup.sql;
     ```
   + 对于分隔文本格式，请先创建数据库（如果它不是您在设置 Amazon RDS 数据库时创建的默认数据库）。

     ```
     MariaDB [(none)]> create database database_name;
     MariaDB [(none)]> use database_name;
     ```

     然后，创建表。

     ```
     MariaDB [(none)]> source table1.sql
     MariaDB [(none)]> source table2.sql
     etc...
     ```

     然后，导入数据。

     ```
     MariaDB [(none)]> LOAD DATA LOCAL INFILE 'table1.txt' INTO TABLE table1 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     MariaDB [(none)]> LOAD DATA LOCAL INFILE 'table2.txt' INTO TABLE table2 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '0x0d0a';
     etc...
     ```

     要提高性能，您可以从多个连接并行执行这些操作，以便同时创建并加载所有表。
**注意**  
如果您在最初转储表时已将任何数据格式化选项与 `mysqldump` 或 `mariadb-dump` 结合使用，则务必将相同的选项与 `LOAD DATA LOCAL INFILE` 结合使用，来确保正确地解读数据文件内容。

1. 对导入的数据库中的一个或两个表运行简单 `SELECT` 查询，来验证导入是否成功。

如果您不再需要该过程中使用的 Amazon EC2 实例，请终止 EC2 实例以减少AWS资源使用。要终止 EC2 实例，请参阅《Amazon Elastic Compute Cloud 用户指南》**中的[终止实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console)。

## 任务 4：将数据从外部数据库复制到新的 Amazon RDS 数据库
<a name="mariadb-importing-data-reduced-downtime-replicate-data"></a>

在将数据复制并传输到 MariaDB 数据库期间，您的源数据库可能已更新。您可以使用复制功能使复制的数据库与源数据库保持同步。

![\[显示将数据从外部 MariaDB 数据库复制到 Amazon RDS 上的数据库的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_5.png)


对 Amazon RDS 数据库启动复制功能所需的权限受到限制且对 Amazon RDS 主用户不可用。因此，请使用相应的 Amazon RDS 存储过程：
+ [mysql.rds\$1set\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 
+ [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md)（配置复制）和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)（开始复制）

### 启动复制
<a name="mariadb-importing-data-reduced-downtime-start-replication"></a>

在任务 1 中，[当您设置复制选项时](#mariadb-importing-data-reduced-downtime-set-replication-options)，您开启了二进制日志记录，并为源数据库设置了唯一服务器 ID。现在您可以将 Amazon RDS 数据库设置为副本，并将活动数据库作为源数据库实例。

1. 在 Amazon RDS 控制台中，将托管源数据库的服务器的 IP 地址添加到 Amazon RDS 数据库的 VPC 安全组。有关配置 VPC 安全组的更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[配置安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

   您可能还需要配置本地网络，以允许来自 Amazon RDS 数据库的 IP 地址的连接，以便它能与源实例进行通信。要查找 Amazon RDS 数据库的 IP 地址，请使用 `host` 命令：

   ```
   host host_name
   ```

   *host\$1name* 是 Amazon RDS 数据库端点中的 DNS 名称，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可以在 Amazon RDS 控制台上的数据库实例详细信息中找到端点值。

1. 通过使用所选的客户端，连接到源实例并创建将用于复制的用户。此账户仅用于复制，并且必须仅供您的域使用以增强安全性。以下命令是一个示例：

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的凭证。

1. 对于源 实例，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。例如，要为您的域的“`REPLICATION CLIENT`”用户授予对所有数据库的 `REPLICATION SLAVE` 和 `repl_user` 权限，请发出以下命令。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. 如果您使用 SQL 格式创建备份文件，并且外部实例不是 MariaDB 10.0.24 或更高版本，请通过运行以下命令查看该文件的内容：

   ```
   cat backup.sql
   ```

   该文件包括 `CHANGE MASTER TO` 注释，其中包含主日志文件名称和位置。在将 `--master-data` 选项与 `mysqldump` 结合使用时，此注释将包含在备份文件中。请注意 `MASTER_LOG_FILE` 和 `MASTER_LOG_POS` 的值。

   ```
   --
   -- Position to start replication or point-in-time recovery from
   --
   
   -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-changelog.000031', MASTER_LOG_POS=107;
   ```

   如果您使用分隔文本格式创建备份文件，并且外部实例不是 MariaDB 10.0.24 或更高版本，您应该已在任务 1 下[当您已创建现有数据库的备份副本时](#mariadb-importing-data-reduced-downtime-create-backup)的步骤 1 中获得二进制日志坐标。

   如果外部实例是 MariaDB 10.0.24 或更高版本，您应该已在任务 1 下[当您已创建现有数据库的备份副本时](#mariadb-importing-data-reduced-downtime-create-backup)的步骤 2 中获得作为复制起点的 GTID。

1. 将 Amazon RDS 数据库设置为副本。如果外部实例不是 MariaDB 10.0.24 或更高版本，请使用 [mysql.rds\$1set\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 存储过程以主用户身份连接到 Amazon RDS 数据库，并将源数据库标识为源复制实例。

   如果您具有 SQL 格式的备份文件，则使用您在步骤 4 中确定的主日志文件名和主日志位置。如果您使用的是分隔文本格式，则使用您在创建备份文件时确定的名称和位置。以下命令是一个示例：

   ```
   CALL mysql.rds_set_external_master ('myserver.mydomain.com', 3306,
       'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的凭证。

   如果外部实例是 MariaDB 10.0.24 或更高版本，请使用 [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 存储过程以主用户身份连接到 Amazon RDS 数据库，并将源数据库标识为源复制实例。使用您在任务 1 下[当您已创建现有数据库的备份副本](#mariadb-importing-data-reduced-downtime-create-backup)的步骤 2 中确定的 GTID。以下命令是一个示例：

   ```
   CALL mysql.rds_set_external_master_gtid ('source_server_ip_address', 3306, 'ReplicationUser', 'password', 'GTID', 1); 
   ```

   `source_server_ip_address` 是源复制实例的 IP 地址。当前不支持 EC2 私有 DNS 地址。
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的凭证。

1. 在 Amazon RDS 数据库上，要开始复制，请运行以下使用 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 存储过程的命令：

   ```
   CALL mysql.rds_start_replication;
   ```

1. 在 Amazon RDS 数据库上，要确定副本何时与源复制实例实现同步，请运行 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 命令。`SHOW REPLICA STATUS` 命令的结果包括 `Seconds_Behind_Master` 字段。当 `Seconds_Behind_Master` 字段返回 0 时，副本将与源复制实例保持同步。

   对于 MariaDB 10.5、10.6、10.11、11.4 或 11.8 数据库实例，请使用 [mysql.rds\$1replica\$1status](mysql_rds_replica_status.md) 存储过程而不是运行 MySQL 命令。

1. 在 Amazon RDS 数据库同步后，开启自动备份以便您可以在需要时还原数据库。您可以使用 [Amazon RDS 控制台](https://console.aws.amazon.com/rds/)开启或修改 Amazon RDS 数据库的自动备份。有关更多信息，请参阅 [备份简介](USER_WorkingWithAutomatedBackups.md)。

## 任务 5：将您的活动应用程序重定向到 Amazon RDS 实例
<a name="mariadb-importing-data-reduced-downtime-redirect-app"></a>

在 MariaDB 数据库与源复制实例保持同步后，您现在可以更新活动的应用程序以使用 Amazon RDS 实例。

![\[显示停止复制并将活动应用程序定向到 Amazon RDS 上的数据库的工作流程。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMariaDBToRDS_6.png)


### 将活动应用程序重新导向到 MariaDB 数据库并停止复制
<a name="mariadb-importing-data-reduced-downtime-redirect-app-stop-app"></a>

1. 要添加 Amazon RDS 数据库的 VPC 安全组，请添加托管应用程序的服务器的 IP 地址。有关修改 VPC 安全组的更多信息，请参阅《Amazon Virtual Private Cloud 用户指南》**中的[配置安全组规则](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-security-group-rules.html)。

1. 验证 [SHOW REPLICA STATUS](https://dev.mysql.com/doc/refman/8.0/en/show-replica-status.html) 命令结果中的 `Seconds_Behind_Master` 字段是否为 0，这表示副本与源复制实例保持同步。

   ```
   SHOW REPLICA STATUS;
   ```

   对于 MariaDB 10.5、10.6、10.11、11.4 或 11.8 数据库实例，请使用 [mysql.rds\$1replica\$1status](mysql_rds_replica_status.md) 过程而不是运行 MySQL 命令。

1. 在事务完成后关闭与源的所有连接。

1. 更新应用程序以使用 Amazon RDS 数据库。此更新通常涉及更改连接设置以标识 Amazon RDS 数据库的主机名和端口、用于进行连接的用户账户和密码以及要使用的数据库。

1. 连接到数据库实例。

1. 通过运行使用以下使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 存储过程的命令来停止 Amazon RDS 实例的复制：

   ```
   CALL mysql.rds_stop_replication;
   ```

1. 通过在您的 Amazon RDS 数据库上运行以下使用 [mysql.rds\$1reset\$1external\$1master](mysql-stored-proc-replicating.md#mysql_rds_reset_external_master) 存储过程的命令，重置复制配置，使该实例不再被识别为副本：

   ```
   CALL mysql.rds_reset_external_master;
   ```

1. 开启其他 Amazon RDS 特征，例如多可用区支持和只读副本。有关更多信息，请参阅[配置和管理 Amazon RDS 的多可用区部署](Concepts.MultiAZ.md)和[使用数据库实例只读副本](USER_ReadRepl.md)。

# 从任意源将数据导入 Amazon RDS for MariaDB 数据库实例
<a name="mariadb-importing-data-any-source"></a>

使用 Amazon RDS，您可以将任意来源的现有 MariaDB 数据迁移到 RDS for MariaDB 数据库实例。您可以将数据从本地数据库、其他云提供商或现有 RDS for MariaDB 数据库实例传输到目标 RDS for MariaDB 数据库实例。借助此功能，您可以整合数据库、实施灾难恢复解决方案或从自管理数据库过渡。常见场景包括从自托管 MariaDB 服务器迁移到完全托管的 Amazon RDS 数据库实例、将多个 MariaDB 数据库整合为单个数据库实例，或者使用生产数据创建测试环境。以下几部分提供有关使用 `mariadb-dump`、备份文件或复制等方法导入 MariaDB 数据的分步说明。

## 步骤 1：创建包含待加载数据的平面文件
<a name="mariadb-importing-data-any-source-create-flat-files"></a>

使用通用格式存储待加载的数据，如逗号分隔值 (CSV)。每个表都必须拥有其自己的文件，您不能将多个表的数据合并到同一文件。每个文件的名称都必须与对应的表相同。可以根据个人喜好设置文件扩展名。例如，如果表名称为 `sales`，文件名可能为 `sales.csv` 或 `sales.txt`。

如果可能，请按照正在加载的表的主键对数据进行排序。这样做可以显著优化加载时间并尽可能减少磁盘存储要求。

该过程的速度和效率取决于能否将文件的大小保持在较小状态。如果在未压缩状态下单个文件的大小超过 1 GiB，则需将此文件分割为多个文件，然后分别加载各个文件。

在类 Unix 的系统（包括 Linux）中，请使用 `split` 命令。例如，以下命令会将 `sales.csv` 文件分割为多个小于 1 GiB 的文件，且只在换行符处进行分割 (-C 1024m)。新文件的名称包括升序数字后缀。以下命令生成名称如 `sales.part_00` 和 `sales.part_01` 的文件。

```
split -C 1024m -d sales.csv sales.part_ 
```

其他操作系统也具有类似的实用程序。

您可以将平面文件存储在任何地方。但是，当在[步骤 5](#mariadb-importing-data-any-source-load-data) 中加载数据时，必须从文件存在的相同位置调用 `mysql` Shell，或者在运行 `LOAD DATA LOCAL INFILE` 时使用文件的绝对路径。

## 步骤 2：阻止任何应用程序访问目标数据库实例
<a name="mariadb-importing-data-any-source-stop-apps"></a>

开始大量加载前，阻止所有应用程序活动访问您打算加载到的目标数据库实例。建议您这样做，特别是当其他会话将要修改正在加载的表或引用的表时。这可以降低加载过程中发生约束冲突的风险并提高加载性能。它还可以将数据库实例还原到加载前的某一时间点，而不会丢失未参与加载的进程所做的更改。

当然，这可能并不可行或不现实。如果您无法在加载前阻止应用程序访问数据库实例，应采取步骤以确保数据的可用性和完整性。所需的具体步骤在很大程度上根据特定的使用案例和现场要求而有所不同。

## 步骤 3：创建数据库快照
<a name="mariadb-importing-data-any-source-create-snapshot"></a>

如果您计划将数据加载到不包含数据的新数据库实例，可以跳过此步骤。否则，我们建议您在加载数据之前和之后创建目标 Amazon RDS 数据库实例的数据库快照。Amazon RDS 数据库快照是数据库实例的完整备份，可用于将数据库实例还原到已知状态。在启动数据库快照时，针对数据库实例的 I/O 操作将在备份数据库过程中暂停。

通过在即将开始加载前创建数据库快照，您可以在需要时将数据库还原到加载前的状态。通过使用在加载后立即创建的数据库快照，您可以在遇到问题时不必再次加载数据。还可以在加载后使用数据库快照将数据导入到新的数据库实例中。

以下示例运行 AWS CLI [create-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/create-db-snapshot.html) 命令来创建 `AcmeRDS` 实例的数据库快照，并为该数据库快照指定标识符 `"preload"`。

对于 Linux、macOS 或 Unix：

```
aws rds create-db-snapshot \
    --db-instance-identifier AcmeRDS \
    --db-snapshot-identifier preload
```

对于：Windows

```
aws rds create-db-snapshot ^
    --db-instance-identifier AcmeRDS ^
    --db-snapshot-identifier preload
```

也可以使用从数据库快照还原功能，以创建用于试运行的测试数据库实例或撤消在加载期间进行的更改。

请务必注意，从数据库快照还原数据库将创建新的数据库实例，与所有数据库实例一样，该数据库实例具有唯一的标识符和端点。要还原数据库实例但不改变端点，请先删除该数据库实例，以使您能够重新使用此端点。

例如，要创建一个适用于试运行或其他测试的数据库实例，您可为数据库实例指定它自己的标识符。在示例中，标识符为 `AcmeRDS-2`"。该示例使用与 `AcmeRDS-2` 关联的端点连接到数据库实例。有关更多信息，请参阅 [restore-db-instance-from-db-snapshot](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html)。

对于 Linux、macOS 或 Unix：

```
aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier AcmeRDS-2 \
    --db-snapshot-identifier preload
```

对于：Windows

```
aws rds restore-db-instance-from-db-snapshot ^
    --db-instance-identifier AcmeRDS-2 ^
    --db-snapshot-identifier preload
```

要重新使用现有的端点，请首先删除该数据库实例，然后为还原的数据库指定相同的标识符。有关更多信息，请参阅 [delete-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/delete-db-instance.html)。

以下示例还在删除数据库实例之前为其制作最终的数据库快照。您可以自由选择，但建议您这样做。

对于 Linux、macOS 或 Unix：

```
aws rds delete-db-instance \
    --db-instance-identifier AcmeRDS \
    --final-db-snapshot-identifier AcmeRDS-Final

aws rds restore-db-instance-from-db-snapshot \
    --db-instance-identifier AcmeRDS \
    --db-snapshot-identifier preload
```

对于：Windows

```
aws rds delete-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --final-db-snapshot-identifier AcmeRDS-Final

aws rds restore-db-instance-from-db-snapshot ^
    --db-instance-identifier AcmeRDS ^
    --db-snapshot-identifier preload
```

## 步骤 4（可选）：关闭 Amazon RDS 自动备份
<a name="mariadb-importing-data-any-source-turn-off-automated-backups"></a>

**警告**  
如果需要执行时间点故障恢复，请勿关闭自动备份。

关闭自动备份是一种性能优化，加载数据时不需要这样做。关闭自动备份会清除所有现有备份。因此，在关闭自动备份后，将无法使用时间点故障恢复功能。关闭自动备份不会影响手动数据库快照。仍然可以还原所有现有的手动数据库快照。

关闭自动备份可减少约 25% 的加载时间，并减少加载期间所需的存储空间。如果您计划将数据加载到不包含任何数据的新数据库实例，关闭备份就可轻松加速加载并避免使用备份所需的额外存储空间。但是，在某些情况下，您可能会计划将数据加载到已包含数据的数据库实例。如果是这样，请权衡关闭备份的优势与无法执行时间点恢复功能的影响。

数据库实例默认开启自动备份 (保留期为一天)。要关闭自动备份，请将备份保留期设置为零。加载后，可以将备份保留期设置为非零值，重新开启自动备份。要开启或关闭备份，Amazon RDS 将关闭并重新启动数据库实例，以开启或关闭 MariaDB 日志记录。

运行 AWS CLI `modify-db-instance` 命令，将备份保留期设置为零并立即应用更改。要将保留期设置为零，需要重新启动数据库实例，因此，等到重新启动完成后再继续操作。有关更多信息，请参阅 [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html)。

对于 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier AcmeRDS \
    --apply-immediately \
    --backup-retention-period 0
```

对于：Windows

```
aws rds modify-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --apply-immediately ^
    --backup-retention-period 0
```

您可以使用 AWS CLI [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令检查数据库实例的状态。以下示例显示 `AcmeRDS` 数据库实例的数据库实例状态：

```
aws rds describe-db-instances --db-instance-identifier AcmeRDS --query "*[].{DBInstanceStatus:DBInstanceStatus}"
```

当数据库实例状态为 `available` 时，您已准备好进行下一步。

## 步骤 5：加载数据
<a name="mariadb-importing-data-any-source-load-data"></a>

要将平面文件中的行读取到数据库表中，请使用 MariaDB `LOAD DATA LOCAL INFILE` 语句。

**注意**  
必须从平面文件存在的相同位置调用 `mariadb` Shell，或者在运行 `LOAD DATA LOCAL INFILE` 时使用文件的绝对路径。

以下示例说明如何将数据从名为 `sales.txt` 的文件加载到数据库中名为 `Sales` 的表中：

```
MariaDB [(none)]> LOAD DATA LOCAL INFILE 'sales.txt' INTO TABLE Sales FIELDS TERMINATED BY ' ' ENCLOSED BY '' ESCAPED BY '\\';
Query OK, 1 row affected (0.01 sec)
Records: 1  Deleted: 0  Skipped: 0  Warnings: 0
```

有关 `LOAD DATA` 语句的更多信息，请参阅 MariaDB 文档中的 [LOAD DATA INFILE](https://mariadb.com/docs/server/reference/sql-statements/data-manipulation/inserting-loading-data/load-data-into-tables-or-index/load-data-infile)。

## 步骤 6：重新开启 Amazon RDS 自动备份
<a name="mariadb-importing-data-any-source-turn-on-automated-backups"></a>

如果您在[步骤 4](#mariadb-importing-data-any-source-turn-off-automated-backups) 中关闭了 Amazon RDS 自动备份，则在加载完成后，请通过将备份保留期重新设置为其预加载值来开启自动备份。如步骤 4 中所述，Amazon RDS 会重新启动数据库实例，因此，请为短暂中断做好准备。

以下示例运行 AWS CLI [modify-db-instance](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) 命令来开启 `AcmeRDS` 数据库实例的自动备份，并将保留期设置为一天：

对于 Linux、macOS 或 Unix：

```
aws rds modify-db-instance \
    --db-instance-identifier AcmeRDS \
    --backup-retention-period 1 \
    --apply-immediately
```

对于：Windows

```
aws rds modify-db-instance ^
    --db-instance-identifier AcmeRDS ^
    --backup-retention-period 1 ^
    --apply-immediately
```

# 在 Amazon RDS 中使用 MariaDB 复制
<a name="USER_MariaDB.Replication"></a>

一般使用只读副本配置 Amazon RDS 数据库实例之间的复制。有关只读副本的一般信息，请参阅[使用数据库实例只读副本](USER_ReadRepl.md)。有关使用 Amazon RDS for MariaDB 上的只读副本的特定信息，请参阅[使用 MariaDB 只读副本](USER_MariaDB.Replication.ReadReplicas.md)。

还可以为 MariaDB 数据库实例配置基于二进制日志坐标的复制。对于 MariaDB 实例，您也可以配置基于复制的全局事务 ID (GTID)，它将提供更高的崩溃安全性。有关更多信息，请参阅 [配置与外部源实例之间的基于 GTID 的复制](MariaDB.Procedural.Replication.GTID.md)。

下面是可用于 RDS for MariaDB 的其他复制选项：
+ 您可以设置 RDS for MariaDB 数据库实例与 Amazon RDS 外部的 MySQL 或 MariaDB 实例之间的复制。有关配置外部源复制的信息，请参阅[配置与外部源实例之间的二进制日志文件位置复制](MySQL.Procedural.Importing.External.ReplMariaDB.md)。
+ 可以配置复制以导入来自 Amazon RDS 外部的 MySQL 或 MariaDB 实例的数据库，或将数据库导出至此类实例。有关更多信息，请参阅[将数据导入到 Amazon RDS for MariaDB 数据库实例并减少停机时间](mariadb-importing-data-reduced-downtime.md)和[使用复制从 MySQL 数据库实例中导出数据](MySQL.Procedural.Exporting.NonRDSRepl.md)。

对于其中任何复制选项，您可以使用基于行的复制、基于语句的复制或混合复制。基于行的复制仅复制因 SQL 语句而导致更改的行。基于语句的复制将复制整个 SQL 语句。混合复制尽可能使用基于语句的复制，但当运行对于基于语句的复制不安全的 SQL 语句时切换到基于行的复制。在大多数情况下，建议使用混合复制。数据库实例的二进制日志格式确定复制是基于行、基于语句还是混合的。有关设置二进制日志格式的信息，请参阅[配置 MariaDB 二进制日志记录](USER_LogAccess.MariaDB.BinaryFormat.md)。

有关 MariaDB 版本之间的复制兼容性的信息，请参阅 MariaDB 文档中的 [Replication Compatibility](https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/#replication-compatibility)。

**Topics**
+ [使用 MariaDB 只读副本](USER_MariaDB.Replication.ReadReplicas.md)
+ [配置与外部源实例之间的基于 GTID 的复制](MariaDB.Procedural.Replication.GTID.md)
+ [配置与外部源实例之间的二进制日志文件位置复制](MySQL.Procedural.Importing.External.ReplMariaDB.md)

# 使用 MariaDB 只读副本
<a name="USER_MariaDB.Replication.ReadReplicas"></a>

接下来，您可以找到有关使用 Amazon RDS for MariaDB 上的只读副本的特定信息。有关只读副本及其使用说明的一般信息，请参阅[使用数据库实例只读副本](USER_ReadRepl.md)。
+ [使用 MariaDB 配置复制筛选条件](USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.md)
+ [使用 MariaDB 配置延迟复制](USER_MariaDB.Replication.ReadReplicas.DelayReplication.md)
+ [使用 MariaDB 更新只读副本](USER_MariaDB.Replication.ReadReplicas.Updates.md)
+ [使用 MariaDB 处理多可用区只读副本部署](USER_MariaDB.Replication.ReadReplicas.MultiAZ.md)
+ [将级联只读副本用于 RDS for MariaDB](USER_MariaDB.Replication.ReadReplicas.Cascading.md)
+ [监控 MariaDB 只读副本](USER_MariaDB.Replication.ReadReplicas.Monitor.md)
+ [开始和停止 MariaDB 只读副本复制](USER_MariaDB.Replication.ReadReplicas.StartStop.md)
+ [排查 MariaDB 只读副本问题](USER_ReadRepl.Troubleshooting.MariaDB.md)

## 使用 MariaDB 配置只读副本
<a name="USER_MariaDB.Replication.ReadReplicas.Configuration"></a>

确保先通过将备份保留期设置为一个非零值来在源数据库实例上启用自动备份，然后 MariaDB 数据库实例才能充当复制源。此要求也适用于作为一个只读副本的源数据库实例的另一个只读副本。

您可以从同一区域内的一个数据库实例创建多达 15 个只读副本。为了高效地进行复制，每个只读副本具有的计算和存储资源的量应与源数据库实例的一样多。如果扩展源数据库实例，则还应扩展只读副本。

RDS for MariaDB 支持级联只读副本。要了解如何配置级联只读副本，请参阅 [将级联只读副本用于 RDS for MariaDB](USER_MariaDB.Replication.ReadReplicas.Cascading.md)。

您可以在引用相同源数据库实例的同时，运行多个只读副本创建和删除操作。当您执行这些操作时，应将每个源实例的只读副本数限制在 15 个以内。

# 使用 MariaDB 配置复制筛选条件
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters"></a>

您可以使用复制筛选条件来指定使用只读副本的数据库和表。复制筛选条件可以将数据库和表包含在复制之中或排除在复制之外。

以下是复制筛选条件的一些使用案例：
+ 缩减只读副本的大小。使用复制筛选，您可以排除只读副本上不需要的数据库和表。
+ 出于安全原因，将数据库和表从只读副本中排除。
+ 在不同只读副本中为特定使用案例复制不同的数据库和表。例如，您可以使用特定的只读副本进行分析或分片。
+ 对于在不同 AWS 区域中具有只读副本的数据库实例，要在不同的 AWS 区域中复制不同的数据库或表。

**注意**  
您还可以使用复制筛选条件来指定使用入站复制拓扑中主 MariaDB 数据库实例的数据库和表。有关此配置的更多信息，请参阅[配置与外部源实例之间的二进制日志文件位置复制](MySQL.Procedural.Importing.External.Repl.md)。

**Topics**
+ [设置 RDS for MariaDB 的复制筛选参数](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Configuring)
+ [RDS for MariaDB 的复制筛选限制](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Limitations)
+ [RDS for MariaDB 的复制筛选示例](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Examples)
+ [查看只读副本的复制筛选条件](#USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Viewing)

## 设置 RDS for MariaDB 的复制筛选参数
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Configuring"></a>

要配置复制筛选条件，请在只读副本上设置以下复制筛选参数：
+ `replicate-do-db` –将更改复制到指定的数据库。为只读副本设置此参数时，仅复制参数中指定的数据库。
+ `replicate-ignore-db` –不将更改复制到指定的数据库。为只读副本设置 `replicate-do-db` 参数时，不会评估此参数。
+ `replicate-do-table` –将更改复制到指定的表。为只读副本设置此参数时，仅复制参数中指定的表。此外，如果设置了 `replicate-do-db` 或 `replicate-ignore-db` 参数，则包含指定表的数据库必须包含在使用只读副本的复制中。
+ `replicate-ignore-table` –不将更改复制到指定的表。为只读副本设置 `replicate-do-table` 参数时，不会评估此参数。
+ `replicate-wild-do-table` – 根据指定的数据库和表名模式复制表。支持 `%` 和 `_` 通配符。设置 `replicate-do-db` 或 `replicate-ignore-db` 参数时，请确保包含指定表的数据库包含在使用只读副本的复制中。
+ `replicate-wild-ignore-table` –不基于指定的数据库和表名模式复制表。支持 `%` 和 `_` 通配符。为只读副本设置 `replicate-do-table` 或 `replicate-wild-do-table` 参数时，不会评估此参数。

将按这些参数列出的顺序对其进行评估。有关这些参数如何运行的更多信息，请参阅 [MariaDB 文档 ](https://mariadb.com/kb/en/replication-filters/#replication-filters-for-replication-slaves)。

默认情况下，这些参数中的每个参数都具有一个空值。在每个只读副本上，您可以使用这些参数来设置、更改和删除复制筛选条件。设置其中一个参数时，请用逗号将各筛选条件分开。

您可以在 `%` 和 `_` 参数中使用 `replicate-wild-do-table` 和 `replicate-wild-ignore-table` 通配符。`%` 通配符可以匹配任意数量的字符，而 `_` 通配符只能匹配一个字符。

源数据库实例的二进制日志记录格式对于复制非常重要，因为它决定了数据更改的记录。`binlog_format` 参数的设置将决定复制是基于行还是基于语句的复制。有关更多信息，请参阅“[配置 MariaDB 二进制日志记录](USER_LogAccess.MariaDB.BinaryFormat.md)”。

**注意**  
无论源数据库实例上的 `binlog_format` 设置如何，所有数据定义语言 (DDL) 语句都将作为语句进行复制。

## RDS for MariaDB 的复制筛选限制
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Limitations"></a>

以下限制适用于对 RDS for MariaDB 进行复制筛选：
+ 每个复制筛选参数不得超过 2000 个字符。
+ 复制筛选条件中不支持逗号。
+ 不支持用于二进制日志筛选的 MariaDB `binlog_do_db` 和 `binlog_ignore_db` 选项。
+ 复制筛选不支持 XA 事务。

  有关更多信息，请参阅 MySQL 文档中的[XA 事务限制](https://dev.mysql.com/doc/refman/8.0/en/xa-restrictions.html)。
+ RDS for MariaDB 版本 10.2 不支持复制筛选。

## RDS for MariaDB 的复制筛选示例
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Examples"></a>

要为只读副本配置复制筛选，请修改与只读副本关联的参数组中的复制筛选参数。

**注意**  
您无法修改默认参数组。如果只读副本使用默认参数组，请创建新的参数组并将其与只读副本关联。有关数据库参数组的更多信息，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 在参数组中设置参数。有关设置参数的信息，请参阅 [在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。在参数组中设置参数时，与参数组关联的所有数据库实例都使用参数设置。如果在参数组中设置复制筛选参数，请确保参数组仅与只读副本关联。将源数据库实例的复制筛选参数留空。

以下示例使用 AWS CLI 设置参数。这些示例将 `ApplyMethod` 设置为 `immediate`，以便在 CLI 命令完成后立即发生参数更改。如果希望在只读副本重新启动后应用待处理的更改，请将 `ApplyMethod` 设置为 `pending-reboot`。

以下示例设置了复制筛选条件：
+ [Including databases in replication](#rep-filter-in-dbs-mariadb)
+ [Including tables in replication](#rep-filter-in-tables-mariadb)
+ [Including tables in replication with wildcard characters](#rep-filter-in-tables-wildcards-mariadb)
+ [Escaping wildcard characters in names](#rep-filter-escape-wildcards-mariadb)
+ [Excluding databases from replication](#rep-filter-ex-dbs-mariadb)
+ [Excluding tables from replication](#rep-filter-ex-tables-mariadb)
+ [Excluding tables from replication using wildcard characters](#rep-filter-ex-tables-wildcards-mariadb)<a name="rep-filter-in-dbs-mariadb"></a>

**Example 将数据库包含在复制之中**  
以下示例将 `mydb1` 和 `mydb2` 数据库包含在复制之内。为只读副本 `replicate-do-db` 设置时，仅复制参数中指定的数据库。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-do-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-do-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-in-tables-mariadb"></a>

**Example 将表包含在复制之中**  
以下示例将数据库 `table1` 中的 `table2` 和 `mydb1` 表包含在复制之中。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-do-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-do-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-in-tables-wildcards-mariadb"></a>

**Example 使用通配符将表包含在复制之中**  
以下示例将数据库 `orders` 中名称以 `returns` 和 `mydb` 开头的表包含在复制之中。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-escape-wildcards-mariadb"></a>

**Example 转义名称中的通配符**  
以下示例展示了如何使用转义字符 `\` 来转义名称中的通配符。  
假设数据库 `mydb1` 中有多个以 `my_table` 开头的表名，而且您希望将这些表包含在复制之中。表名包括下划线（下划线也是通配符），因此该示例将表名中的下划线转义。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-do-table", "ParameterValue": "my\_table%", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-dbs-mariadb"></a>

**Example 将数据库排除在复制之外**  
以下示例将 `mydb1` 和 `mydb2` 数据库排除在复制之外。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-ignore-db", "ParameterValue": "mydb1,mydb2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-tables-mariadb"></a>

**Example 将表排除在复制之外**  
以下示例将数据库 `table1` 中的表 `table2` 和 `mydb1`排除在复制之外。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-ignore-table", "ParameterValue": "mydb1.table1,mydb1.table2", "ApplyMethod":"immediate"}]"
```<a name="rep-filter-ex-tables-wildcards-mariadb"></a>

**Example 使用通配符将表排除在复制之外**  
以下示例将数据库 `orders` 中名称以 `returns` 和 `mydb` 开头的表排除在复制之外。  
对于 Linux、macOS 或 Unix：  

```
aws rds modify-db-parameter-group \
  --db-parameter-group-name myparametergroup \
  --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```
对于 Windows：  

```
aws rds modify-db-parameter-group ^
  --db-parameter-group-name myparametergroup ^
  --parameters "[{"ParameterName": "replicate-wild-ignore-table", "ParameterValue": "mydb.orders%,mydb.returns%", "ApplyMethod":"immediate"}]"
```

## 查看只读副本的复制筛选条件
<a name="USER_MariaDB.Replication.ReadReplicas.ReplicationFilters.Viewing"></a>

您可以通过以下方式查看只读副本的复制筛选条件：
+ 检查与只读副本关联的参数组中复制筛选参数的设置。

  有关说明，请参阅[在 Amazon RDS 中查看数据库参数组的参数值](USER_WorkingWithParamGroups.Viewing.md)。
+ 在 MariaDB 客户端中，连接到只读副本并运行 `SHOW REPLICA STATUS` 语句。

  在输出中，以下字段显示了只读副本的复制筛选条件：
  + `Replicate_Do_DB`
  + `Replicate_Ignore_DB`
  + `Replicate_Do_Table`
  + `Replicate_Ignore_Table`
  + `Replicate_Wild_Do_Table`
  + `Replicate_Wild_Ignore_Table`

  有关这些字段的更多信息，请参阅 MySQL 文档中的[检查复制状态](https://dev.mysql.com/doc/refman/8.0/en/replication-administration-status.html)。
**注意**  
以前的 MariaDB 版本使用的是 `SHOW SLAVE STATUS`，而不是 `SHOW REPLICA STATUS`。如果您使用的 MariaDB 版本低于 10.5，那么请使用 `SHOW SLAVE STATUS`。

# 使用 MariaDB 配置延迟复制
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication"></a>

可以使用延迟复制作为灾难恢复策略。使用延迟复制，可指定最短的时间（以秒为单位）以延迟从源到只读副本的复制。如果出现灾难（如意外删除了表），可完成以下步骤以快速从灾难恢复：
+ 在导致灾难的更改发送到它之前停止复制到只读副本。

  要停止复制，请使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 存储过程。
+ 按照[将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)中的说明，将只读副本提升为新的源数据库实例。

**注意**  
MariaDB 10.6 及更高版本支持延迟复制。
使用存储过程配置延迟复制。无法使用AWS 管理控制台、AWS CLI 或 Amazon RDS API 配置延迟复制。
您可以在延迟复制配置中使用基于全局事务标识符 (GTID) 的复制。

**Topics**
+ [在创建只读副本时配置延迟复制](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.ReplicaCreation)
+ [修改现有只读副本的延迟复制](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.ExistingReplica)
+ [提升只读副本](#USER_MariaDB.Replication.ReadReplicas.DelayReplication.Promote)

## 在创建只读副本时配置延迟复制
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication.ReplicaCreation"></a>

要为未来通过数据库实例创建的任何只读副本配置延迟复制，请使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 参数运行 `target delay` 存储过程。

**在创建只读副本时配置延迟复制**

1. 通过使用 MariaDB 客户端，以主用户身份连接到作为只读副本源的 MariaDB 数据库实例。

1. 使用 [mysql.rds\$1set\$1configuration](mysql-stored-proc-configuring.md#mysql_rds_set_configuration) 参数运行 `target delay` 存储过程。

   例如，运行以下存储过程，针对从当前数据库实例创建的任何只读副本，指定将复制延迟至少一小时（3600 秒）。

   ```
   call mysql.rds_set_configuration('target delay', 3600);
   ```
**注意**  
运行此存储过程之后，将为使用 AWS CLI 或 Amazon RDS API 创建的任何只读副本配置延迟指定秒数的复制。

## 修改现有只读副本的延迟复制
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication.ExistingReplica"></a>

要修改现有只读副本的延迟复制，请运行 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 存储过程。

**修改现有只读副本的延迟复制**

1. 使用 MariaDB 客户端，以主用户的身份连接到只读副本。

1. 使用 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 存储过程停止复制。

1. 运行 [mysql.rds\$1set\$1source\$1delay](mysql-stored-proc-replicating.md#mysql_rds_set_source_delay) 存储过程。

   例如，运行以下存储过程，指定复制到只读副本延迟至少一小时（3600 秒）。

   ```
   call mysql.rds_set_source_delay(3600);
   ```

1. 使用 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 存储过程开始复制。

## 提升只读副本
<a name="USER_MariaDB.Replication.ReadReplicas.DelayReplication.Promote"></a>

在灾难恢复方案中，当复制停止后，您可以将只读副本提升为新的源数据库实例。有关提升只读副本的信息，请参阅 [将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)。

# 使用 MariaDB 更新只读副本
<a name="USER_MariaDB.Replication.ReadReplicas.Updates"></a>

只读副本旨在支持读取查询，但您可能需要偶尔进行更新。例如，您可能需要添加索引，以加快访问副本的特定类型的查询。您可通过在只读副本的数据库参数组中将 `read_only` 参数设置为 **0** 来启用更新。

# 使用 MariaDB 处理多可用区只读副本部署
<a name="USER_MariaDB.Replication.ReadReplicas.MultiAZ"></a>

您可从单可用区或多可用区数据库实例部署中创建只读副本。您可以使用多可用区部署提高关键数据的持久性和可用性，但无法使用多可用区为只读查询提供辅助服务。您可以改为从大流量、多可用区数据库实例创建只读副本以分载只读查询。如果多可用区部署的源实例故障转移到辅助可用区，则任何关联的只读副本都将自动切换为使用辅助可用区（现在为主可用区）作为其复制源。有关更多信息，请参阅“[配置和管理 Amazon RDS 的多可用区部署](Concepts.MultiAZ.md)”。

您可以将只读副本创建为多可用区数据库实例。Amazon RDS 会在另一个可用区中创建您的副本的备用，用于支持副本的故障转移。创建您的只读副本作为多可用区数据库实例与源数据库是否为多可用区数据库实例无关。

# 将级联只读副本用于 RDS for MariaDB
<a name="USER_MariaDB.Replication.ReadReplicas.Cascading"></a>

RDS for MariaDB 支持级联只读副本。使用*级联只读副本*，您可以扩展读取操作，而不会增加源 RDS for MariaDB 数据库实例的开销。

使用级联只读副本，您的 RDS for MariaDB 数据库实例会将数据发送到链中的第一个只读副本。然后，该只读副本将数据发送到链中的第二个副本，依此类推。最终结果是，链中的所有只读副本都具有来自 RDS for MariaDB 数据库实例的更改，但不会只在源数据库实例上产生开销。

您可以从源 RDS for MariaDB 数据库实例在链中创建一系列最多三个只读副本。例如，假设您具有 RDS for MariaDB 数据库实例 `mariadb-main`。您可执行以下操作：
+ 从 `mariadb-main` 开始，创建链中的第一个只读副本 `read-replica-1`。
+ 接下来，从 `read-replica-1`，创建链中的下一个只读副本 `read-replica-2`。
+ 最后，从 `read-replica-2`，创建链中的第三个只读副本 `read-replica-3`。

除了 `mariadb-main` 系列中的第三个级联只读副本之外，您无法创建另一个只读副本。从 RDS for MariaDB 源数据库实例到一系列级联只读副本末尾的完整实例系列最多可以包含四个数据库实例。

为了使级联只读副本正常工作，每个源 RDS For MariaDB 数据库实例必须启用自动备份。要对只读副本开启自动备份，请先创建只读副本，然后修改只读副本以开启自动备份。有关更多信息，请参阅 [创建只读副本](USER_ReadRepl.Create.md)。

与任何只读副本一样，您可以升级属于级联一部分的只读副本。从只读副本链中升级只读副本将从链中移除该副本。例如，假设您希望将一些工作负载从 `mariadb-main` 数据库实例转移到新实例，以仅供会计部门使用。假设该示例中的链有三个只读副本，您决定升级 `read-replica-2`。该链受到如下影响：
+ 升级 `read-replica-2` 会将其从复制链中移除。
  + 现在它是一个完全读/写数据库实例。
  + 它继续复制到 `read-replica-3`，就像在升级之前那样。
+ 您的 `mariadb-main` 继续复制到 `read-replica-1`。

有关升级只读副本的更多信息，请参阅[将只读副本提升为独立的数据库实例](USER_ReadRepl.Promote.md)。

# 监控 MariaDB 只读副本
<a name="USER_MariaDB.Replication.ReadReplicas.Monitor"></a>

对于 MariaDB 只读副本，您可以通过在 Amazon CloudWatch 中查看 Amazon RDS `ReplicaLag` 指标来监控复制滞后。`ReplicaLag` 指标报告 `Seconds_Behind_Master` 命令的 `SHOW REPLICA STATUS` 字段的值。

**注意**  
以前的 MariaDB 版本使用的是 `SHOW SLAVE STATUS`，而不是 `SHOW REPLICA STATUS`。如果您使用的 MariaDB 版本低于 10.5，那么请使用 `SHOW SLAVE STATUS`。

MariaDB 复制滞后的常见原因如下所示：
+ 网络中断。
+ 向只读副本上带索引的表写入。如果只读副本上的 `read_only` 参数未设置为 0，它可以中断复制。
+ 使用 MyISAM 等非事务性存储引擎。仅 MariaDB 上的 InnoDB 存储引擎支持复制。

当 `ReplicaLag` 指标达到 0 时，即表示副本已赶上源数据库实例进度。如果 `ReplicaLag` 指标返回 -1，则当前未激活复制。`ReplicaLag` = -1 等效于 `Seconds_Behind_Master` = `NULL`。

# 开始和停止 MariaDB 只读副本复制
<a name="USER_MariaDB.Replication.ReadReplicas.StartStop"></a>

可通过调用系统存储过程 [mysql.rds\$1stop\$1replication](mysql-stored-proc-replicating.md#mysql_rds_stop_replication) 和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication)，在 Amazon RDS 数据库实例上停止再重新开始复制过程。对于长时间运行的操作 (如创建大型索引)，在两个 Amazon RDS 实例之间进行复制时可以这样做。在导入或导出数据库时，也需要停止再开始复制。有关更多信息，请参阅[将数据导入到 Amazon RDS for MariaDB 数据库实例并减少停机时间](mariadb-importing-data-reduced-downtime.md)和[使用复制从 MySQL 数据库实例中导出数据](MySQL.Procedural.Exporting.NonRDSRepl.md)。

如果复制连续 30 天停止，不论是手动还是由于复制错误，Amazon RDS 将结束源数据库实例与所有只读副本之间的复制。这样做是为了防止源数据库实例上的存储需求增长以及长故障转移时间。只读副本数据库实例仍可用。但是无法恢复复制，因为在结束复制后，已从源数据库实例中删除只读副本所需的二进制日志。您可为源数据库实例创建新的只读副本来重新建立复制。

# 排查 MariaDB 只读副本问题
<a name="USER_ReadRepl.Troubleshooting.MariaDB"></a>

MariaDB 的复制技术是异步的。由于它们是异步的，因此，源数据库实例上偶发的 `BinLogDiskUsage` 会增多，而只读副本上应有 `ReplicaLag`。例如，对源数据库实例的大量写入操作可以并行进行。与之对比的是，对只读副本的写入操作使用单个 I/O 线程串行进行，这会导致源实例与只读副本之间存在滞后。有关 MariaDB 文档中只读副本的更多信息，请转到[复制概述](http://mariadb.com/kb/en/mariadb/replication-overview/)。

您可通过多种方式来减少对源数据库实例的更新与对只读副本的后续更新之间的滞后，例如：
+ 将只读副本的存储大小和数据库实例类调整到与源数据库实例类似。
+ 确保源数据库实例和只读副本使用的数据库参数组中的参数设置相兼容。有关更多信息和示例，请参阅本部分后面的有关 `max_allowed_packet` 参数的讨论。

Amazon RDS 监控只读副本的复制状态，如果由于任何原因停止复制，则将只读副本实例的 `Replication State` 字段更新为 `Error`。可能会有这样的例子，在您的只读副本上运行的 DML 查询与对源数据库实例的更新冲突。

可通过查看 `Replication Error` 字段来检查 MariaDB 引擎引发的关联错误的详细信息。还生成指示只读副本状态的事件，包括 [RDS-EVENT-0045](USER_Events.Messages.md#RDS-EVENT-0045)、[RDS-EVENT-0046](USER_Events.Messages.md#RDS-EVENT-0046) 和 [RDS-EVENT-0047](USER_Events.Messages.md#RDS-EVENT-0047)。有关这些事件和事件订阅的详细信息，请参阅 [使用 Amazon RDS 事件通知](USER_Events.md)。如果返回 MariaDB 错误消息，则检查 [MariaDB 错误消息文档](http://mariadb.com/kb/en/mariadb/mariadb-error-codes/)中的错误。

一个可导致复制出错的常见问题是只读副本的 `max_allowed_packet` 参数的值小于源数据库实例的 `max_allowed_packet` 参数的值。`max_allowed_packet` 参数是可在数据库参数组中进行设置的自定义参数，用于指定可在数据库上运行的最大 DML 代码大小。有时候，与源数据库实例关联的数据库参数组中的 `max_allowed_packet` 参数值，要小于与源的只读副本关联的数据库参数组中的 `max_allowed_packet` 参数值。在这些情况下，复制过程可能会引发错误 (数据包大于 'max\$1allowed\$1packet' 字节) 并停止复制。通过将源和只读副本设置为使用具有相同 `max_allowed_packet` 参数值的数据库参数组，即可更正此错误。

其他可导致复制错误的常见情况包括：
+ 对只读副本上的表进行写入操作。如果是在只读副本上创建索引，则需要将 `read_only` 参数设置为 **0** 才能创建索引。如果对只读副本上的表进行写入操作，则可能会中断复制。
+ 使用非事务性存储引擎，如 MyISAM。只读副本需要使用事务性存储引擎。仅 MariaDB 上的 InnoDB 存储引擎支持复制。
+ 使用不安全的不确定性查询，如 `SYSDATE()`。有关更多信息，请参阅[确定二进制日志记录中的安全和不安全语句](https://dev.mysql.com/doc/refman/8.0/en/replication-rbr-safe-unsafe.html)。

如果您确定可安全跳过错误，那么可以按照[跳过 RDS for MySQL 的当前复制错误](Appendix.MySQL.CommonDBATasks.SkipError.md)中描述的步骤操作。否则，可删除只读副本，然后使用相同的数据库实例标识符创建实例，以使终端节点保持与旧只读副本的终端节点相同。如果复制错误得到纠正，则 `Replication State` 将更改为 *replicating*。

对于 MariaDB 数据库实例，在某些情况下，如果某些二进制日志 (binlog) 事件在故障期间未刷新，则只读副本将无法切换到辅助可用区。在这些情况下，请手动删除并重新创建只读副本。您可通过设置以下参数值来降低发生这种情况的可能性：`sync_binlog=1` 和 `innodb_flush_log_at_trx_commit=1`。这些设置可能降低性能，因此，请先测试其影响，然后在生产环境中实施更改。

# 配置与外部源实例之间的基于 GTID 的复制
<a name="MariaDB.Procedural.Replication.GTID"></a>

您可以将基于全局事务标识符 (GTID) 的复制从版本 10.0.24 或更高版本的外部 MariaDB 实例设置到 RDS for MariaDB 数据库实例中。对 Amazon RDS 设置外部源实例和副本时，请遵循以下准则：
+ 监控作为副本的 RDS for MariaDB 数据库实例的故障转移事件。如果发生失效转移，则可能会在具有不同的网络地址的新主机上重新创建作为副本的数据库实例。有关如何监控故障转移事件的信息，请参阅[使用 Amazon RDS 事件通知](USER_Events.md)。
+ 在源实例上保留二进制日志 (binlog)，直到您确认将其应用于副本。这种维护将确保您可以在发生故障时还原源实例。
+ 在 Amazon RDS 上对 MariaDB 数据库实例启用自动备份。通过启用自动备份，可以确保在需要重新同步源实例和副本时能够将副本还原到特定时间点。有关备份和时间点还原的信息，请参阅[备份、还原和导出数据](CHAP_CommonTasks.BackupRestore.md)。

**注意**  
对 MariaDB 数据库实例启动复制功能所需的权限受到限制，且对 Amazon RDS 主用户不可用。因此，您必须使用 Amazon RDS [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 和 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令来设置活动数据库和 RDS for MariaDB 数据库之间的复制。

要启动外部源实例和 Amazon RDS 上的 MariaDB 数据库实例之间的复制，请使用以下步骤。<a name="MariaDB.Procedural.Importing.External.Repl.Procedure"></a>

**启动复制**

1. 将源 MariaDB 实例设为只读：

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1. 获取外部 MariaDB 实例的当前 GTID。您可以通过使用 `mysql` 或您选择的查询编辑器运行 `SELECT @@gtid_current_pos;` 来执行该操作。

   GTID 采用 `<domain-id>-<server-id>-<sequence-id>` 格式。典型的 GTID 将类似于 **0-1234510749-1728**。有关 GTID 及其组成部分的更多信息，请参阅 MariaDB 文档中的[全局事务 ID](http://mariadb.com/kb/en/mariadb/global-transaction-id/)。

1. 使用 `mysqldump` 将数据库从外部 MariaDB 实例复制到 MariaDB 数据库实例。对于非常大的数据库，您可能需要使用[将数据导入到 Amazon RDS for MariaDB 数据库实例并减少停机时间](mariadb-importing-data-reduced-downtime.md)中的过程。

   对于 Linux、macOS 或 Unix：

   ```
   mysqldump \
       --databases database_name \
       --single-transaction \
       --compress \
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql \
           --host=hostname \
           --port=3306 \
           -u RDS_user_name \
           -pRDS_password
   ```

   对于：Windows

   ```
   mysqldump ^
       --databases database_name ^
       --single-transaction ^
       --compress ^
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql ^
           --host=hostname ^
           --port=3306 ^
           -u RDS_user_name ^
           -pRDS_password
   ```
**注意**  
确保 `-p` 选项和输入的密码之间没有空格。  
作为安全最佳实践，请指定除此处所示提示以外的密码。

   在 `--host` 命令中使用 `--user (-u)`、`--port`、`-p` 和 `mysql` 选项可指定用于连接到 MariaDB 数据库实例的主机名、用户名、端口和密码。主机名是 MariaDB 数据库实例终端节点中的 DNS 名称，例如，`myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可以在 Amazon RDS 管理控制台上的实例详细信息中找到终端节点值。

1. 再次将源 MariaDB 实例设为可写。

   ```
   mysql> SET GLOBAL read_only = OFF;
   mysql> UNLOCK TABLES;
   ```

1. 在 Amazon RDS 管理控制台中，将承载外部 MariaDB 数据库的服务器的 IP 地址添加到 MariaDB 数据库实例的 VPC 安全组。有关修改 VPC 安全组的更多信息，请转到 *Amazon Virtual Private Cloud 用户指南* 中的[您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

   在满足以下条件时，IP 地址可能会发生更改：
   + 您正在使用公有 IP 地址在外部源实例和数据库实例之间进行通信。
   + 外部源实例已停止并重新启动。

   如果满足这些条件，请在添加 IP 地址之前先对其进行验证。

   您可能还需要配置本地网络，允许来自 MariaDB 数据库实例 IP 地址的连接，使它能与外部 MariaDB 实例进行通信。要查找 MariaDB 数据库实例的 IP 地址，请使用 `host` 命令。

   ```
   host db_instance_endpoint
   ```

   主机名是 MariaDB 数据库实例终端节点中的 DNS 名称。

1. 通过使用所选的客户端，连接到外部 MariaDB 实例并创建将用于复制的 MariaDB 用户。此账户仅用于复制，并且必须仅供您的域使用以增强安全性。示例如下：

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

1. 对于外部 MariaDB 实例，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。例如，要为您的域的“`REPLICATION CLIENT`”用户授予对所有数据库的 `REPLICATION SLAVE` 和 `repl_user` 权限，请发出以下命令。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. 将 MariaDB 数据库实例设置为副本。通过使用 [mysql.rds\$1set\$1external\$1master\$1gtid](mysql_rds_set_external_master_gtid.md) 命令，以主用户身份连接到 MariaDB 数据库实例，并将外部 MariaDB 数据库标识为复制源实例。使用您在步骤 2 中确定的 GTID。示例如下：

   ```
   CALL mysql.rds_set_external_master_gtid ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'GTID', 1);
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

1. 在 MariaDB 数据库实例上，发出 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令以启动复制：

   ```
   CALL mysql.rds_start_replication; 
   ```

# 配置与外部源实例之间的二进制日志文件位置复制
<a name="MySQL.Procedural.Importing.External.ReplMariaDB"></a>

您可以使用二进制日志文件复制来设置 RDS for MySQL 或 MariaDB 数据库实例与 Amazon RDS 外部的 MySQL 或 MariaDB 实例之间的复制。

**Topics**
+ [开始前的准备工作](#MySQL.Procedural.Importing.External.Repl.BeforeYouBegin)
+ [配置与外部源实例之间的二进制日志文件位置复制](#MySQL.Procedural.Importing.External.Repl.Procedure)

## 开始前的准备工作
<a name="MySQL.Procedural.Importing.External.Repl.BeforeYouBegin"></a>

您可以使用复制的事务的二进制日志文件位置配置复制。

对 Amazon RDS 数据库实例启动复制功能所需的权限受到限制且对 Amazon RDS 主用户不可用。因此，请确保使用 Amazon RDS [mysql.rds\$1set\$1external\$1master（RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 或 [mysql.rds\$1set\$1external\$1source（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 以及 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令来设置活动数据库和 Amazon RDS 数据库之间的复制。

要为 MySQL 或 MariaDB 数据库设置二进制日志记录格式，请更新 `binlog_format` 参数。如果您的数据库实例使用默认数据库实例参数组，请创建一个新的数据库参数组来修改 `binlog_format` 参数。在 MariaDB 和 MySQL 8.0 及更低版本中，`binlog_format` 默认设置为 `MIXED`。不过，如果您需要特定的二进制日志 (binlog) 格式，也可以将 `binlog_format` 设置为 `ROW` 或 `STATEMENT`。重启您的数据库实例以使更改生效。在 MySQL 8.4 及更高版本中，`binlog_format` 默认设置为 `ROW`。

有关设置 `binlog_format` 参数的信息，请参阅[为单可用区数据库配置 RDS for MySQL 二进制日志记录](USER_LogAccess.MySQL.BinaryFormat.md)。有关不同 MySQL 复制类型的含义的信息，请参阅 MySQL 文档中的[基于语句和基于行的复制的优点和缺点](https://dev.mysql.com/doc/refman/8.0/en/replication-sbr-rbr.html)。

## 配置与外部源实例之间的二进制日志文件位置复制
<a name="MySQL.Procedural.Importing.External.Repl.Procedure"></a>

对 Amazon RDS 设置外部源实例和副本时，请遵循以下准则：
+ 监控作为副本的 Amazon RDS 数据库实例的失效转移事件。如果发生失效转移，则可能会在具有不同的网络地址的新主机上重新创建作为副本的数据库实例。有关如何监控失效转移事件的信息，请参阅[使用 Amazon RDS 事件通知](USER_Events.md)。
+ 在您的源实例上维护二进制日志，直至您确认其已应用于副本。该维护确保在发生故障时可以还原源实例。
+ 对 Amazon RDS 数据库实例启用自动备份。通过启用自动备份，可以确保在需要重新同步源实例和副本时能够将副本还原到特定时间点。有关备份和时间点还原的信息，请参阅[备份、还原和导出数据](CHAP_CommonTasks.BackupRestore.md)。

**配置与外部源实例之间的二进制日志文件复制**

1. 将源 MySQL 或 MariaDB 实例设置为只读。

   ```
   mysql> FLUSH TABLES WITH READ LOCK;
   mysql> SET GLOBAL read_only = ON;
   ```

1. 对源 MySQL 或 MariaDB 实例运行 `SHOW MASTER STATUS` 命令以确定二进制日志位置。

   您将收到类似于以下示例的输出。

   ```
   File                        Position  
   ------------------------------------
    mysql-bin-changelog.000031      107   
   ------------------------------------
   ```

1. 使用 `mysqldump` 将数据库从外部实例复制到 Amazon RDS 数据库实例。对于非常大的数据库，您可能需要使用[将数据导入 Amazon RDS for MySQL 数据库实例并减少停机时间](mysql-importing-data-reduced-downtime.md)中的过程。

   对于 Linux、macOS 或 Unix：

   ```
   mysqldump --databases database_name \
       --single-transaction \
       --compress \
       --order-by-primary \
       -u local_user \
       -plocal_password | mysql \
           --host=hostname \
           --port=3306 \
           -u RDS_user_name \
           -pRDS_password
   ```

   对于：Windows

   ```
   mysqldump --databases database_name ^
       --single-transaction ^
       --compress ^
       --order-by-primary ^
       -u local_user ^
       -plocal_password | mysql ^
           --host=hostname ^
           --port=3306 ^
           -u RDS_user_name ^
           -pRDS_password
   ```
**注意**  
确保 `-p` 选项和输入的密码之间没有空格。

   要指定主机名、用户名、端口和密码以连接到 Amazon RDS 数据库实例，请在 `--host` 命令中使用 `--user (-u)`、`--port`、`-p` 和 `mysql` 选项。主机名是 Amazon RDS 数据库实例端点中的域名服务 (DNS) 名称，例如 `myinstance.123456789012.us-east-1.rds.amazonaws.com`。您可以在 AWS 管理控制台上的实例详细信息中找到端点值。

1. 再次将源 MySQL 或 MariaDB 实例设置为可写。

   ```
   mysql> SET GLOBAL read_only = OFF;
   mysql> UNLOCK TABLES;
   ```

   有关生成备份以用于复制的更多信息，请参阅 [MySQL 文档](https://dev.mysql.com/doc/refman/8.0/en/replication-solutions-backups-read-only.html)。

1. 在 AWS 管理控制台 中，将托管外部数据库的服务器的 IP 地址添加到 Amazon RDS 数据库实例的 Virtual Private Cloud (VPC) 安全组中。有关修改 VPC 安全组的更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的[您的 VPC 的安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

   在满足以下条件时，IP 地址可能会发生更改：
   + 您正在使用公有 IP 地址在外部源实例和数据库实例之间进行通信。
   + 外部源实例已停止并重新启动。

   如果满足这些条件，请在添加 IP 地址之前先对其进行验证。

   您可能还需要配置本地网络，以允许来自 Amazon RDS 数据库实例的 IP 地址的连接。通过执行此操作，您的本地网络可以与外部 MySQL 或 MariaDB 实例进行通信。要查找 Amazon RDS 数据库实例的 IP 地址，请使用 `host` 命令。

   ```
   host db_instance_endpoint
   ```

   主机名是 Amazon RDS 数据库实例端点中的 DNS 名称。

1. 通过使用所选的客户端，连接到外部实例并创建要用于复制的用户。请仅将该账户用于复制，并将其限制为您的域以提高安全性。示例如下：

   ```
   CREATE USER 'repl_user'@'mydomain.com' IDENTIFIED BY 'password';
   ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

1. 对于外部 实例，向复制用户授予 `REPLICATION CLIENT` 和 `REPLICATION SLAVE` 权限。例如，要为您的域的“`REPLICATION CLIENT`”用户授予对所有数据库的 `REPLICATION SLAVE` 和 `repl_user` 权限，请发出以下命令。

   ```
   GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl_user'@'mydomain.com';
   ```

1. 将 Amazon RDS 数据库实例设置为副本。为此，请先以主用户身份连接到 Amazon RDS 数据库实例。然后使用 [mysql.rds\$1set\$1external\$1source（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source) 或 [mysql.rds\$1set\$1external\$1master（RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master) 命令，将外部 MySQL 或 MariaDB 数据库标识为源实例。使用在步骤 2 中确定的主日志文件名和主日志位置。下面是一些命令示例。

   **MySQL 8.4**

   ```
   CALL mysql.rds_set_external_source ('mysourceserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```

   **MariaDB 以及 MySQL 8.0 和 5.7**

   ```
   CALL mysql.rds_set_external_master ('mymasterserver.mydomain.com', 3306, 'repl_user', 'password', 'mysql-bin-changelog.000031', 107, 1);
   ```
**注意**  
在 RDS for MySQL 上，可以选择通过运行 [mysql.rds\$1set\$1external\$1source\$1with\$1delay（RDS for MySQL 主要版本 8.4 及更高版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_source_with_delay) 或 [mysql.rds\$1set\$1external\$1master\$1with\$1delay（RDS for MariaDB 和 RDS for MySQL 主要版本 8.0 及更低版本）](mysql-stored-proc-replicating.md#mysql_rds_set_external_master_with_delay) 存储过程来使用延迟复制。在 RDS for MySQL 中，使用延迟复制的一个原因是，使用 [mysql.rds\$1start\$1replication\$1until](mysql-stored-proc-replicating.md#mysql_rds_start_replication_until) 存储过程打开灾难恢复。目前，RDS for MariaDB 支持延迟复制，但不支持 `mysql.rds_start_replication_until` 过程。

1. 在 Amazon RDS 数据库实例上，发出 [mysql.rds\$1start\$1replication](mysql-stored-proc-replicating.md#mysql_rds_start_replication) 命令以启动复制。

   ```
   CALL mysql.rds_start_replication;
   ```

# 适用于 MariaDB 数据库引擎的选项
<a name="Appendix.MariaDB.Options"></a>

在下文中，您可以找到适用于运行 MariaDB 数据库引擎的 Amazon RDS 实例的选项或其他功能的说明。要开启这些选项，可以将它们添加到自定义选项组中，然后将选项组与数据库实例相关联。有关使用选项组的详细信息，请参阅[使用选项组](USER_WorkingWithOptionGroups.md)。

Amazon RDS 支持 MariaDB 的以下选项：


| 选项 ID | 引擎版本 | 
| --- | --- | 
|  `MARIADB_AUDIT_PLUGIN`  |  MariaDB 10.3 及更高版本  | 

## MariaDB 审计插件支持
<a name="Appendix.MariaDB.Options.AuditPlugin"></a>

Amazon RDS 支持在 MariaDB 数据库实例上使用 MariaDB 审核插件。MariaDB 审核插件可记录数据库活动，如用户登录数据库、针对数据库运行查询等。数据库活动记录存储在日志文件中。

### 审计插件选项设置
<a name="Appendix.MariaDB.Options.AuditPlugin.Options"></a>

Amazon RDS 支持 MariaDB 审计插件选项的以下设置。

**注意**  
如果您未在 RDS 控制台中配置选项设置，RDS 将使用原定设置。


| 选项设置 | 有效值 | 默认值 | 描述 | 
| --- | --- | --- | --- | 
| `SERVER_AUDIT_FILE_PATH` | `/rdsdbdata/log/audit/` | `/rdsdbdata/log/audit/` |  日志文件的位置。日志文件包含 `SERVER_AUDIT_EVENTS` 中指定的活动记录。有关更多信息，请参阅“[查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)”和“[MariaDB 数据库日志文件](USER_LogAccess.Concepts.MariaDB.md)”。  | 
| `SERVER_AUDIT_FILE_ROTATE_SIZE` | 1–1000000000 | 1000000 |  达到该字节大小时，会导致文件轮换。有关更多信息，请参阅“[MariaDB 的日志轮换和保留](USER_LogAccess.MariaDB.LogFileSize.md)”。  | 
| `SERVER_AUDIT_FILE_ROTATIONS` | 0–100 | 9 |  当 `server_audit_output_type=file` 时要保存的日志轮换数量。如果设置为 0，则日志文件从不轮换。有关更多信息，请参阅[MariaDB 的日志轮换和保留](USER_LogAccess.MariaDB.LogFileSize.md) 和[下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)。  | 
| `SERVER_AUDIT_EVENTS` | `CONNECT`, `QUERY`, `TABLE`, `QUERY_DDL`, `QUERY_DML`, `QUERY_DML_NO_SELECT`, `QUERY_DCL` | `CONNECT`, `QUERY` |  要在日志中记录的活动类型。安装 MariaDB 审核插件可自行登录。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/Appendix.MariaDB.Options.html)  | 
| `SERVER_AUDIT_INCL_USERS` | 多个逗号分隔值 | 无 |  仅包括指定用户的活动。默认情况下，会记录所有用户的活动。`SERVER_AUDIT_INCL_USERS` 和 `SERVER_AUDIT_EXCL_USERS` 是相互排斥的。如果将值添加到 `SERVER_AUDIT_INCL_USERS`，请确保未向 `SERVER_AUDIT_EXCL_USERS` 中添加任何值。  | 
| `SERVER_AUDIT_EXCL_USERS` | 多个逗号分隔值 | 无 |  排除指定用户的活动。默认情况下，会记录所有用户的活动。`SERVER_AUDIT_INCL_USERS` 和 `SERVER_AUDIT_EXCL_USERS` 是相互排斥的。如果将值添加到 `SERVER_AUDIT_EXCL_USERS`，请确保未向 `SERVER_AUDIT_INCL_USERS` 中添加任何值。  `rdsadmin` 用户会每秒查询一次数据库，以检查数据库的运行状况。根据您的其他设置，此活动可能导致您的日志文件大小非常快速地增长。如果您不需要记录此活动，请将 `rdsadmin` 用户添加到 `SERVER_AUDIT_EXCL_USERS` 列表。   `CONNECT`会始终为所有用户记录 活动，即使是该选项设置指定的用户。   | 
| `SERVER_AUDIT_LOGGING` | `ON` | `ON` |  日志记录处于活动状态。唯一有效值为 `ON`。Amazon RDS 不支持停用日志记录。如果您要停用日志记录，请删除 MariaDB 审核插件。有关更多信息，请参阅“[删除 MariaDB 审核插件](#Appendix.MariaDB.Options.AuditPlugin.Remove)”。  | 
| `SERVER_AUDIT_QUERY_LOG_LIMIT` | 0–2147483647 | 1024 |  记录中查询字符串的长度限制。  | 

### 添加 MariaDB 审核插件
<a name="Appendix.MariaDB.Options.AuditPlugin.Add"></a>

向数据库实例添加 MariaDB 审核插件的一般过程如下：

1. 创建新的选项组，或者复制或修改现有选项组。

1. 将 选项添加到该选项组。

1. 将选项组与数据库实例相关联。

添加 MariaDB 审核插件后，您无需重新启动数据库实例。一旦选项组处于活动状态，审核便会立即开始。

**添加 MariaDB 审核插件**

1. 确定您想要使用的选项组。您可以创建新的选项组，或使用现有选项组。如果您想使用现有选项组，请跳到下一步。否则，请创建自定义数据库选项组。对于 **Engine**（引擎），请选择 **mariadb**；对于 **Major engine version**（主引擎版本），请选择 **10.3** 或更高版本。有关更多信息，请参阅 [创建选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create)。

1. 将 **MARIADB\$1AUDIT\$1PLUGIN** 选项添加到选项组中，然后配置选项设置。有关添加选项的更多信息，请参阅 [将选项添加到选项组](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption)。有关各项设置的更多信息，请参阅[审计插件选项设置](#Appendix.MariaDB.Options.AuditPlugin.Options)。

1. 将选项组应用到新的或现有的数据库实例。
   + 对于新数据库实例，您可以在启动实例时应用选项组。有关更多信息，请参阅“[创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)”。
   + 对于现有数据库实例，您可以通过修改数据库实例并附加新的选项组来应用选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

### 查看和下载 MariaDB 审计插件日志
<a name="Appendix.MariaDB.Options.AuditPlugin.Log"></a>

启用 MariaDB 审计插件后，您将以访问其他任何基于文本的日志文件的相同方式来访问日志文件中的结果。审计日志文件位于 `/rdsdbdata/log/audit/`。有关在控制台中查看日志文件的信息，请参阅 [查看和列出数据库日志文件](USER_LogAccess.Procedural.Viewing.md)。有关下载日志文件的信息，请参阅 [下载数据库日志文件](USER_LogAccess.Procedural.Downloading.md)。

### 修改 MariaDB 审计插件设置
<a name="Appendix.MariaDB.Options.AuditPlugin.ModifySettings"></a>

启用 MariaDB 审核插件后，您可以修改插件设置。有关如何修改选项设置的更多信息，请参阅 [修改选项设置](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption)。有关各项设置的更多信息，请参阅[审计插件选项设置](#Appendix.MariaDB.Options.AuditPlugin.Options)。

### 删除 MariaDB 审核插件
<a name="Appendix.MariaDB.Options.AuditPlugin.Remove"></a>

Amazon RDS 不支持关闭 MariaDB 审核插件中的日志记录。不过，您可以从数据库实例删除插件。在删除 MariaDB 审核插件时，将自动重新启动数据库实例以停止审核。

要从数据库实例中删除 MariaDB 审核插件，请执行以下操作之一：
+ 从 MariaDB 审核插件选项所属的选项组中删除 MariaDB 审核插件选项。此更改会影响使用该选项组的所有数据库实例。有关更多信息，请参阅“[从选项组中删除选项](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.RemoveOption)” 
+ 修改数据库实例，并指定不包含插件的其他选项组。此更改会影响单个数据库实例。您可以指定默认 (空) 选项组，或指定其他自定义选项组。有关更多信息，请参阅“[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)”。

# MariaDB 的参数
<a name="Appendix.MariaDB.Parameters"></a>

默认情况下，MariaDB 数据库实例使用特定于 MariaDB 数据库的数据库参数组。该参数组包含 MySQL 数据库引擎的 Amazon RDS 数据库参数组中所含的部分而非全部参数。它还包含一些新的特定于 MariaDB 的参数。有关使用参数组和设置参数的信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

## 查看 MariaDB 参数
<a name="Appendix.MariaDB.Parameters.Viewing"></a>

RDS for MariaDB 参数设置为您已选择的存储引擎的默认值。有关 MariaDB 参数的更多信息，请参阅 [MariaDB 文档](http://mariadb.com/kb/en/mariadb/documentation/)。有关 MariaDB 存储引擎的更多信息，请参阅 [Amazon RDS 上的 MariaDB 支持的存储引擎](MariaDB.Concepts.Storage.md)。

您可以使用 RDS 控制台或 AWS CLI 查看特定 RDS for MariaDB 版本的可用参数。有关在 RDS 控制台中查看 MariaDB 参数组中参数的信息，请参阅 [在 Amazon RDS 中查看数据库参数组的参数值](USER_WorkingWithParamGroups.Viewing.md)。

使用 AWS CLI，您可以通过运行 [https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-parameters.html](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-engine-default-parameters.html) 命令查看 RDS for MariaDB 版本的参数。为 `--db-parameter-group-family` 选项指定下列值之一：
+ `mariadb11.8`
+ `mariadb11.4`
+ `mariadb10.11`
+ `mariadb10.6`
+ `mariadb10.5`
+ `mariadb10.4`
+ `mariadb10.3`

例如，要查看 RDS for MariaDB 版本 10.6 的参数，请运行以下命令。

```
aws rds describe-engine-default-parameters --db-parameter-group-family mariadb10.6
```

输出看上去类似于以下内容。

```
{
    "EngineDefaults": {
        "Parameters": [
            {
                "ParameterName": "alter_algorithm",
                "Description": "Specify the alter table algorithm.",
                "Source": "engine-default",
                "ApplyType": "dynamic",
                "DataType": "string",
                "AllowedValues": "DEFAULT,COPY,INPLACE,NOCOPY,INSTANT",
                "IsModifiable": true
            },
            {
                "ParameterName": "analyze_sample_percentage",
                "Description": "Percentage of rows from the table ANALYZE TABLE will sample to collect table statistics.",
                "Source": "engine-default",
                "ApplyType": "dynamic",
                "DataType": "float",
                "AllowedValues": "0-100",
                "IsModifiable": true
            },
            {
                "ParameterName": "aria_block_size",
                "Description": "Block size to be used for Aria index pages.",
                "Source": "engine-default",
                "ApplyType": "static",
                "DataType": "integer",
                "AllowedValues": "1024-32768",
                "IsModifiable": false
            },
            {
                "ParameterName": "aria_checkpoint_interval",
                "Description": "Interval in seconds between automatic checkpoints.",
                "Source": "engine-default",
                "ApplyType": "dynamic",
                "DataType": "integer",
                "AllowedValues": "0-4294967295",
                "IsModifiable": true
            },
        ...
```

要仅列出 RDS for MariaDB 版本 10.6 的可修改参数，请运行以下命令。

对于 Linux、macOS 或 Unix：

```
aws rds describe-engine-default-parameters --db-parameter-group-family mariadb10.6 \
   --query 'EngineDefaults.Parameters[?IsModifiable==`true`]'
```

对于：Windows

```
aws rds describe-engine-default-parameters --db-parameter-group-family mariadb10.6 ^
   --query "EngineDefaults.Parameters[?IsModifiable==`true`]"
```

## 不提供的 MariaDB 参数
<a name="Appendix.MariaDB.Parameters.MySQLNotAvailable"></a>

以下 MySQL 参数在 MariaDB 特定的数据库参数组中不可用：
+ bind\$1address
+ binlog\$1error\$1action
+ binlog\$1gtid\$1simple\$1recovery
+ binlog\$1max\$1flush\$1queue\$1time
+ binlog\$1order\$1commits
+ binlog\$1row\$1image
+ binlog\$1rows\$1query\$1log\$1events
+ binlogging\$1impossible\$1mode
+ block\$1encryption\$1mode
+ core\$1file
+ default\$1tmp\$1storage\$1engine
+ div\$1precision\$1increment
+ end\$1markers\$1in\$1json
+ enforce\$1gtid\$1consistency
+ eq\$1range\$1index\$1dive\$1limit
+ explicit\$1defaults\$1for\$1timestamp
+ gtid\$1executed
+ gtid-mode
+ gtid\$1next
+ gtid\$1owned
+ gtid\$1purged
+ log\$1bin\$1basename
+ log\$1bin\$1index
+ log\$1bin\$1use\$1v1\$1row\$1events
+ log\$1slow\$1admin\$1statements
+ log\$1slow\$1slave\$1statements
+ log\$1throttle\$1queries\$1not\$1using\$1indexes
+ master-info-repository
+ optimizer\$1trace
+ optimizer\$1trace\$1features
+ optimizer\$1trace\$1limit
+ optimizer\$1trace\$1max\$1mem\$1size
+ optimizer\$1trace\$1offset
+ relay\$1log\$1info\$1repository
+ rpl\$1stop\$1slave\$1timeout
+ slave\$1parallel\$1workers
+ slave\$1pending\$1jobs\$1size\$1max
+ slave\$1rows\$1search\$1algorithms
+ storage\$1engine
+ table\$1open\$1cache\$1instances
+ timed\$1mutexes
+ transaction\$1allow\$1batching
+ validate-password
+ validate\$1password\$1dictionary\$1file
+ validate\$1password\$1length
+ validate\$1password\$1mixed\$1case\$1count
+ validate\$1password\$1number\$1count
+ validate\$1password\$1policy
+ validate\$1password\$1special\$1char\$1count

有关 MySQL 参数的更多信息，请参阅 [MySQL 文档](https://dev.mysql.com/doc/refman/8.0/en/)。

# 将数据从 MySQL 数据库快照迁移到 MariaDB 数据库实例
<a name="USER_Migrate_MariaDB"></a>

您可使用 AWS 管理控制台、AWS CLI 或 Amazon RDS API 将 RDS for MySQL 数据库快照迁移到运行 MariaDB 的新数据库实例。您必须使用从运行 MySQL 5.6 或 5.7 的 Amazon RDS 数据库实例创建的数据库快照。要了解如何创建 RDS for MySQL 数据库快照，请参阅 [为 Amazon RDS 的单可用区数据库实例创建数据库快照](USER_CreateSnapshot.md)。

迁移快照不会影响从中拍摄快照的原始数据库实例。您可以先测试和验证新数据库实例，然后再将流量转移到该数据库实例以替代原始数据库实例。

在从 MySQL 迁移到 MariaDB 后，MariaDB 数据库实例将与默认数据库参数组和选项组关联。在还原数据库快照后，可以关联新数据库实例的自定义数据库参数组。不过，MariaDB 参数组具有一组不同的可配置系统变量。有关 MySQL 和 MariaDB 系统变量之间差异的信息，请参阅 [MariaDB 和 MySQL 之间的系统变量差异](https://mariadb.com/kb/en/system-variable-differences-between-mariadb-and-mysql/)。要了解数据库参数组，请参阅 [Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。要了解选项组，请参阅[使用选项组](USER_WorkingWithOptionGroups.md)。

## 执行迁移
<a name="USER_Migrate_MariaDB.Migrating"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 RDS API 将 RDS for MySQL 数据库快照迁移到新的 MariaDB 数据库实例。

### 控制台
<a name="USER_Migrate_MariaDB.CON"></a>

**将 MySQL 数据库快照迁移到 MariaDB 数据库实例**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**快照**，然后选择您希望迁移的 MySQL 数据库快照。

1. 对于 **Actions**（操作），请选择 **Migrate snapshot**（迁移快照）。随后将显示 **Migrate database**（迁移数据库）页。

1. 对于**迁移到数据库引擎**，选择 **mariadb**。

   Amazon RDS 将自动选择 **DB engine version**（数据库引擎版本）。您不能更改数据库引擎版本。  
![\[Amazon RDS 控制台中用于从 MySQL 迁移到 MariaDB 的迁移数据库页面。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/MigrateMariaDB.png)

1. 对于其余部分，请指定数据库实例设置。有关每项设置的信息，请参阅 [数据库实例的设置](USER_CreateDBInstance.Settings.md)。

1. 选择 **Migrate**。

### AWS CLI
<a name="USER_Migrate_MariaDB.CLI"></a>

要将数据从 MySQL 数据库快照迁移到 MariaDB 数据库实例，请结合以下选项运行 AWS CLI [https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html](https://docs.aws.amazon.com/cli/latest/reference/rds/restore-db-instance-from-db-snapshot.html) 命令：
+ --db-instance-identifier – 要从数据库快照创建的数据库实例的名称。
+ --db-snapshot-identifier – 要从中还原的数据库快照的标识符。
+ --engine – 要用于新实例的数据库引擎。

**Example**  
对于 Linux、macOS 或 Unix：  

```
1. aws rds restore-db-instance-from-db-snapshot \
2.     --db-instance-identifier newmariadbinstance \
3.     --db-snapshot-identifier mysqlsnapshot \
4.     --engine mariadb
```
对于 Windows：  

```
1. aws rds restore-db-instance-from-db-snapshot ^
2.     --db-instance-identifier newmariadbinstance ^
3.     --db-snapshot-identifier mysqlsnapshot ^
4.     --engine mariadb
```

### API
<a name="USER_Migrate_MariaDB.API"></a>

要将数据从 MySQL 数据库快照迁移到 MariaDB 数据库实例，请调用 Amazon RDS API 操作 [https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html)。

## MariaDB 和 MySQL 之间的不兼容性
<a name="USER_Migrate_MariaDB.Incompatibilities"></a>

MySQL 和 MariaDB 之间的不兼容性包括：
+ 您无法将使用 MySQL 8.0 创建的数据库快照迁移到 MariaDB。
+ 如果源 MySQL 数据库使用 SHA256 密码哈希，请确保先重置经过 SHA256 哈希处理的用户密码，然后再连接到 MariaDB 数据库。以下代码说明如何重置经过 SHA256 哈希处理的密码。

  ```
  SET old_passwords = 0;
  UPDATE mysql.user SET plugin = 'mysql_native_password',
  Password = PASSWORD('new_password')
  WHERE (User, Host) = ('master_user_name', %);
  FLUSH PRIVILEGES;
  ```
+ 如果您的 RDS 主用户账户使用 SHA-256 密码哈希，请确保使用 AWS 管理控制台、[https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-instance.html) AWS CLI 命令或 [ModifyDBInstance](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html) RDS API 操作重置密码。有关修改数据库实例的信息，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。
+ MariaDB 不支持 Memcached 插件。不过，Memcached 插件使用的数据将存储为 InnoDB 表。在迁移 MySQL 数据库快照后，您可以使用 SQL 访问由 Memcached 插件使用的数据。有关 innodb\$1memcache 数据库的更多信息，请参阅 [InnoDB 内存缓存插件内部信息](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-internals.html)。

# Amazon RDS SQL 上的 MariaDB 参考
<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 进行复制提供了二进制日志复制无法提供的崩溃安全功能，因此，我们建议在复制实例支持 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*   
指定是否在复制连接中使用安全套接字层（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>

 *operation*   
字符串。要执行的 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
+-----------+
```

**注意**  
 收缩操作可能需要一些时间，具体取决于临时表空间大小和当前工作负载。

**重要**  
只有当所有影响临时表空间大小的临时表都不再使用时，临时表空间才会缩小。我们建议您在实例上没有任何活动的临时表空间时运行此过程。

# MariaDB 数据库实例的本地时区
<a name="MariaDB.Concepts.LocalTimeZone"></a>

默认情况下，MariaDB 数据库实例的时区是协调世界时 (UTC)。您可以将数据库实例的时区设置为您的应用程序的本地时区。

要设置数据库实例的本地时区，请将数据库实例参数组中的 `time_zone` 参数设置为本节后面列出的受支持值之一。在设置参数组的 `time_zone` 参数时，所有使用该参数组的数据库实例和只读副本都会改用新的本地时区。有关如何设置参数组中的参数的信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

设置本地时区之后，所有新数据库连接都会反映更改。如果在更改本地时区时打开了任何数据库连接，则到关闭连接再打开新连接之后才会看到本地时区更新。

您可以为数据库实例及其一个或多个只读副本设置不同的本地时区。为此，请对数据库实例和副本使用不同的参数组，并将每个参数组中的 `time_zone` 参数设置为不同的本地时区。

如果要跨 AWS 区域复制，则源数据库实例和只读副本使用不同的参数组（参数组对于 AWS 区域是唯一的）。要对每个实例使用相同的本地时区，您必须在实例和只读副本的参数组中设置 `time_zone` 参数。

从数据库快照还原数据库实例时，本地时区设置为 UTC。还原完成之后，可以将时区更新为本地时区。如果将数据库实例还原到某个时间点，则还原的数据库实例的本地时区是来自还原的数据库实例的参数组的时区设置。

互联网编号分配机构（IANA）每年多次在 [https://www.iana.org/time-zones](https://www.iana.org/time-zones) 上发布新的时区。每当 RDS 发布 MariaDB 的新次要维护版本时，RDS 都会附带发布时的最新时区数据。当您使用最新的 RDS for MariaDB 版本时，您会获得来自 RDS 的最新时区数据。为确保您的数据库实例具有最新的时区数据，我们建议升级到更高的数据库引擎版本。或者，您可以手动修改 MariaDB 数据库实例中的时区表。为此，可以使用 SQL 命令或者在 SQL 客户端中运行 [mysql\$1tzinfo\$1to\$1sql 工具](https://mariadb.com/kb/en/mysql_tzinfo_to_sql/)。手动更新时区数据后，重启数据库实例以使更改生效。RDS 不会修改或重置正在运行的数据库实例的时区数据。只有在执行数据库引擎版本升级时，才会安装新的时区数据。

您可以将本地时区设置为以下值之一。


| 区 | 时区 | 
| --- | --- | 
|  非洲  |  非洲/开罗、非洲/卡萨布兰卡、非洲/哈拉雷、非洲/蒙罗维亚、非洲/内罗毕、非洲/的黎波里、非洲/温得和克  | 
|  美洲  |  美洲/阿拉瓜尼亚、美洲/亚松森、美洲/波哥大、美洲/布宜诺斯艾利斯、美洲/加拉加斯、美洲/奇瓦瓦、美洲/库亚巴、美洲/丹佛、美洲/福塔莱萨、美洲/危地马拉、美洲/哈利法克斯、美洲/玛瑙斯、美洲/马塔莫罗斯、美洲/蒙特雷、美洲/蒙得维的亚、美洲/凤凰城、美洲/圣地亚哥、美洲/蒂华纳  | 
|  亚洲  |  亚洲/阿曼、亚洲/阿什哈巴德、亚洲/巴格达、亚洲/巴库、亚洲/曼谷、亚洲/贝鲁特、亚洲/加尔各答、亚洲/大马士革、亚洲/达卡、亚洲/伊尔库茨克、亚洲/耶路撒冷、亚洲/喀布尔、亚洲/卡拉奇、亚洲/加德满都、亚洲/克拉斯诺雅茨克、亚洲/马加丹、亚洲/马斯喀特、亚洲/新西伯利亚、亚洲/利雅得、亚洲/首尔、亚洲/上海、亚洲/新加坡、亚洲/台北、亚洲/德黑兰、亚洲/东京、亚洲/乌兰巴托、亚洲/符拉迪沃斯托克、亚洲/雅库茨克、亚洲/埃里温  | 
|  大西洋  |  大西洋州/亚速尔群岛  | 
|  澳大利亚  |  澳大利亚/阿德莱德、澳大利亚/布里斯班、澳大利亚/达尔文、澳大利亚/霍巴特、澳大利亚/珀斯、澳大利亚/悉尼  | 
|  巴西  |  巴西/迪诺罗尼亚、巴西/东部  | 
|  加拿大  |  加拿大/纽芬兰、加拿大/萨斯喀彻温省、加拿大/育空地区  | 
|  欧洲  |  欧洲/阿姆斯特丹、欧洲/雅典、欧洲/都柏林、欧洲/赫尔辛基、欧洲/伊斯坦布尔、欧洲/加里宁格勒、欧洲/莫斯科、欧洲/巴黎、欧洲/布拉格、欧洲/萨拉热窝  | 
|  太平洋  |  太平洋/奥克兰、太平洋/斐济、太平洋/关岛、太平洋/檀香山、太平洋/萨摩亚群岛  | 
|  美国  |  美国/阿拉斯加、美国/中部、美国/印第安纳东部、美国/东部、美国/太平洋地区  | 
|  UTC  |  UTC  | 

# RDS for MariaDB 的已知问题和限制
<a name="CHAP_MariaDB.Limitations"></a>

以下各项是使用 RDS for MariaDB 时的已知问题和限制。

**注意**  
此列表并不详尽。

**Topics**
+ [Amazon RDS 中的 MariaDB 文件大小限制](#RDS_Limits.FileSize.MariaDB)
+ [InnoDB 保留字](#MariaDB.Concepts.InnodbDatabaseName)
+ [自定义端口](#MariaDB.Concepts.CustomPorts)
+ [性能详情](#MariaDB.Concepts.PerformanceInsights)

## Amazon RDS 中的 MariaDB 文件大小限制
<a name="RDS_Limits.FileSize.MariaDB"></a>

对于 MariaDB 数据库实例，在使用 InnoDB file-per-table 表空间时，表的最大大小为 16 TB。此限制也将系统表空间的最大大小约束为 16 TB。默认情况下，为 MariaDB 数据库实例设置 InnoDB file-per-table 表空间（每个表位于各自的表空间中）。此限制与 MariaDB 数据库实例的最大存储限制无关。有关存储限制的更多信息，请参阅 [Amazon RDS 数据库实例存储](CHAP_Storage.md)。

根据您的应用程序，使用 InnoDB file-per-table 表空间有一些优缺点。要确定适用于您的应用程序的最佳方法，请参阅 MySQL 文档中的 [File-Per-Table 表空间](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-per-table-tablespaces.html)。

建议不要允许表增长到最大文件大小。一般而言，更好的方法是将数据分区到较小的表中，这可以提高性能并缩短恢复时间。

可用于将大型表划分为多个较小表的一个选项是分区。*分区* 可基于您指定的规则将大型表的各个部分分布到单独的文件中。例如，如果您按日期存储事务，则可以创建分区规则，以便使用分区将较旧的事务分布到单独的文件中。随后您可以定期存档无需随时可供应用程序使用的历史事务数据。有关更多信息，请参阅 MySQL 文档中的[分区](https://dev.mysql.com/doc/refman/5.7/en/partitioning.html)。

**确定所有 InnoDB 表空间的大小**
+ 使用以下 SQL 命令可确定任何表是否太大以及是否适合进行分区。
**注意**  
对于 MariaDB 10.6 及更高版本，此查询还返回 InnoDB 系统表空间的大小。  
对于 10.6 之前的 MariaDB 版本，您无法通过查询系统表来确定 InnoDB 系统表空间的大小。我们强烈建议您升级到更高的版本。

  ```
  1. SELECT SPACE,NAME,ROUND((ALLOCATED_SIZE/1024/1024/1024), 2) 
  2. as "Tablespace Size (GB)"  
  3. FROM information_schema.INNODB_SYS_TABLESPACES ORDER BY 3 DESC;
  ```

**确定非 InnoDB 用户表的大小**
+ 使用以下 SQL 命令来确定是否有任何非 InnoDB 用户表过大。

  ```
  SELECT TABLE_SCHEMA, TABLE_NAME, round(((DATA_LENGTH + INDEX_LENGTH+DATA_FREE)
  / 1024 / 1024/ 1024), 2) As "Approximate size (GB)" FROM information_schema.TABLES
  WHERE TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema')
  and ENGINE<>'InnoDB';
  ```

**启用 InnoDB file-per-table 表空间**
+ 在数据库实例的参数组中将 `innodb_file_per_table` 参数设置为 `1`。

**禁用 InnoDB file-per-table 表空间**
+ 在数据库实例的参数组中将 `innodb_file_per_table` 参数设置为 `0`。

有关更新参数组的信息，请参阅[Amazon RDS 的参数组](USER_WorkingWithParamGroups.md)。

当您启用或禁用 InnoDB file-per-table 表空间后，可以发出 `ALTER TABLE` 命令。您可以使用此命令将表从全局表空间移动到其自己的表空间。或者，您可以将表从其自己的表空间移动到全局表空间。以下为示例。

```
1. ALTER TABLE table_name ENGINE=InnoDB, ALGORITHM=COPY; 
```

## InnoDB 保留字
<a name="MariaDB.Concepts.InnodbDatabaseName"></a>

`InnoDB` 是 RDS for MariaDB 的保留字。您不能将此名称用于 MariaDB 数据库。

## 自定义端口
<a name="MariaDB.Concepts.CustomPorts"></a>

Amazon RDS 禁止连接到 MariaDB 引擎的自定义端口 33060。为您的 MariaDB 引擎选择不同的端口。

## 性能详情
<a name="MariaDB.Concepts.PerformanceInsights"></a>

InnoDB 计数器在 RDS for MariaDB 版本 10.11 的性能详情中不可见，因为 MariaDB 社区不再支持它们。