

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用与 MySQL 兼容的数据库作为同构数据迁移的来源 AWS DMS
<a name="dm-data-providers-source-mysql"></a>

可以使用与 MySQL 兼容的数据库（MySQL 或 MariaDB），作为 AWS DMS中[同构数据迁移](data-migrations.md)的源。在此情况下，源数据提供程序可以是本地数据库、Amazon EC2 数据库、RDS for MySQL 数据库或 MariaDB 数据库。

要运行同构数据迁移，必须使用对要复制的所有源表和二级对象具有 `SELECT` 权限的数据库用户。对于更改数据捕获（CDC）任务，此用户还必须具备（`REPLICATION CLIENT`对于高于 10.5.2 的 MariaDB 版本为 `BINLOG MONITOR`）和 `REPLICATION SLAVE` 权限。对于完全加载数据迁移，不需要这两个权限。

可使用以下脚本，在 MySQL 数据库中创建具所需权限的数据库用户。对您迁移到的所有数据库运行`GRANT`查询 AWS。

```
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';

GRANT REPLICATION SLAVE, REPLICATION CLIENT  ON *.* TO 'your_user'@'%';
GRANT SELECT, RELOAD, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'your_user'@'%';

GRANT BACKUP_ADMIN ON *.* TO 'your_user'@'%';
```

在前面的示例中，用您自己的信息替换每个*user input placeholder*示例。如果源 MySQL 数据库版本低于 8.0，则可以跳过 `GRANT BACKUP_ADMIN` 命令。

可使用以下脚本，在 MariaDB 数据库中创建具所需权限的数据库用户。对您迁移到的所有数据库运行 GRANT 查询 AWS。

```
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
GRANT SELECT, RELOAD, LOCK TABLES, REPLICATION SLAVE, BINLOG MONITOR, SHOW VIEW ON  *.* TO 'your_user'@'%';
```

在前面的示例中，用您自己的信息替换每个*user input placeholder*示例。

以下各节描述了自管理 MySQL 数据库和 AWS托管 MySQL 数据库的特定配置先决条件。

**Topics**
+ [使用自管理的 MySQL 兼容数据库作为同构数据迁移的源](#dm-data-providers-source-mysql-sm)
+ [使用 AWS托管的 MySQL 兼容数据库作为同构数据迁移的来源 AWS DMS](#dm-data-providers-source-mysql-aws)
+ [使用与 MySQL 兼容的数据库作为同构数据迁移的源的限制](#dm-data-providers-source-mysql-limitations)

## 使用自管理的 MySQL 兼容数据库作为同构数据迁移的源
<a name="dm-data-providers-source-mysql-sm"></a>

本节介绍如何配置本地托管的或在 Amazon EC2 实例上托管的与 MySQL 兼容的数据库。

选择源 MySQL 或 MariaDB 数据库的版本。请确保 AWS DMS 它支持您的源 MySQL 或 MariaDB 数据库版本，如中所述。[DMS 同构数据迁移的源](CHAP_Introduction.Sources.md#CHAP_Introduction.Sources.HomogeneousDataMigrations)

要使用 CDC，请确保启用二进制日志记录。要启用二进制日志记录，请在 MySQL 或 MariaDB 数据库的 `my.ini`（Windows）或 `my.cnf`（UNIX）文件中配置以下参数。


| 参数 | 值 | 
| --- | --- | 
| `server-id` | 将该参数设置为 1 或更大的值。 | 
| `log-bin` | 设置二进制日志文件的路径，例如 `log-bin=E:\MySql_Logs\BinLog`。请勿包含文件扩展名。 | 
| `binlog_format` | 将该参数设置为 `ROW`。我们建议在复制期间使用此设置，因为在某些情况下，如果 `binlog_format` 设置为 `STATEMENT`，那么在将数据复制到目标时可能会导致不一致。如果 `binlog_format` 设置为 `MIXED`，数据库引擎还会向目标写入类似的不一致数据，因为数据库引擎会自动切换到基于 `STATEMENT` 的日志记录。 | 
| `expire_logs_days` | 将该参数设置为 1 或更大的值。为防止过度使用磁盘空间，我们建议您不要使用默认值 0。 | 
| `binlog_checksum` | 将该参数设置为 `NONE`。 | 
| `binlog_row_image` | 将该参数设置为 `FULL`。 | 
| `log_slave_updates` | 如果您使用 MySQL 或 MariaDB 副本作为源，请将此参数设置为 `TRUE`。 | 

## 使用 AWS托管的 MySQL 兼容数据库作为同构数据迁移的来源 AWS DMS
<a name="dm-data-providers-source-mysql-aws"></a>

本节介绍如何配置 Amazon RDS for MySQL 和 Amazon RDS for MariaDB 数据库实例。

当您使用 AWS托管的 MySQL 或 MariaDB 数据库作为 AWS DMS中同构数据迁移的源时，请确保您满足以下条件才能实现 CDC：
+ 要为 RDS for MySQL 和 RDS for MariaDB 启用二进制日志，请在实例级别启用自动备份。要为 Aurora MySQL 集群启用二进制日志，请更改参数组中的变量 `binlog_format`。无需为 Aurora MySQL 集群启用自动备份。

  接下来，将 `binlog_format` 参数设置为 `ROW`。

  有关设置自动备份的更多信息，请参阅《Amazon RDS 用户指南》中的[启用自动备份](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.html#USER_WorkingWithAutomatedBackups.Enabling)**。

  有关为 Amazon RDS for MySQL 或 MariaDB 数据库设置二进制日志记录的更多信息，请参阅《Amazon RDS 用户指南》中的[设置二进制日志记录格式](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)**。

  有关为 Aurora MySQL 集群设置二进制日志记录的更多信息，请参阅[如何为 Amazon Aurora MySQL 集群开启二进制日志记录？](https://aws.amazon.com/premiumsupport/knowledge-center/enable-binary-logging-aurora/)。
+ 确保二进制日志可供使用 AWS DMS。由于 AWS由托管的 MySQL 和 MariaDB 数据库会尽快清除二进制日志，因此您应该延长日志的可用时间。例如，要将日志保留时间延长至 24 小时，请运行以下命令。

  ```
  call mysql.rds_set_configuration('binlog retention hours', 24);
  ```
+ 将 `binlog_row_image` 参数设置为 `Full`。
+ 将 `binlog_checksum` 参数设置为 `NONE`。
+ 如果使用 Amazon RDS MySQL 或 MariaDB 副本作为源，请在只读副本上启用备份，并确保 `log_slave_updates` 参数设置为 `TRUE`。

## 使用与 MySQL 兼容的数据库作为同构数据迁移的源的限制
<a name="dm-data-providers-source-mysql-limitations"></a>

使用与 MySQL 兼容的数据库作为同构数据迁移的源时，存在以下限制：
+ 同构迁移任务不支持诸如序列之类的 MariaDB 对象。
+ 由于不兼容的对象差异，从 MariaDB 迁移到 Amazon RDS MySQL/Aurora MySQL 可能会失败。
+ 用于连接到数据源的用户名具有以下限制：
  + 长度为 2 到 64 个字符。
  + 不能包含空格。
  + 可以包含以下字符：a-z、A-Z、0-9、下划线 (\$1)。
  + 必须以 a-z 或 A-Z 开头。
+ 用于连接到数据源的密码具有以下限制：
  + 长度为 1 到 128 个字符。
  + 不能包含以下任何字符：单引号 (')、双引号 (")、分号 (;) 或空格。
+ AWS DMS 同构数据迁移会在目标 Amazon RDS 实例上创建未加密的 MySQL 和 MariaDB 对象，即使源对象已加密。适用于 MySQL 的 RDS 不支持加密对象所需的 MySQL keyring\$1a AWS ws 密钥环插件。请参阅《Amazon RDS 用户指南》中的[“不支持 MySQL 密钥环插件”文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.KnownIssuesAndLimitations.html#MySQL.Concepts.Limits.KeyRing)
+ AWS DMS 不使用全局事务标识符 (GTIDs) 进行数据复制，即使源数据包含全局事务标识符 () 也是如此。