

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

# 将本地 MySQL 数据库迁移至 Amazon EC2
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2"></a>

*Lorenzo Mota，Amazon Web Services*

## Summary
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-summary"></a>

此模式为将本地 MySQL 数据库迁移至 Amazon Elastic Compute Cloud (Amazon EC2) 实例上的 MySQL 数据库提供了指导。该模式讨论了如何使用 AWS Database Migration Service (AWS DMS) 或原生 MySQL 工具（例如 my **sqldump）进行迁移**。专注于将整个数据库迁移到 MySQL 数据库实例。

该模式主要面向 DBAs 解决方案架构师。可在小型或大型项目、测试或最终迁移阶段使用。我们建议您在生产环境中使用此模式之前，先至少运行一个测试周期。

## 先决条件和限制
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account。
+ 本地数据中心的 MySQL 源数据库 

**产品版本**
+ MySQL 版本 5.5 及更高版本。
+ 亚马逊 EC2 支持的目标操作系统；参见[亚马逊 EC2 FAQs](https://aws.amazon.com/ec2/faqs/)

## 架构
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-architecture"></a>

**源技术堆栈**
+ 本地 MySQL 数据库

**目标技术堆栈**
+ Amazon EC2 上的 MySQL 数据库实例

**AWS 数据迁移方法**
+ AWS DMS
+ [像 mysq [ldump 这样的本机 MySQ](https://dev.mysql.com/doc/refman/en/mysqldump.html) L 工具，或者像 Percona 这样的第三方工具 XtraBackup](https://www.percona.com/mysql/software/percona-xtrabackup)

**目标架构**

下图说明了割接后目标 Amazon EC2 的实施方案。

![MySQL 数据库实例位于 Amazon EC2 上，并且已复制到备用 MySQL 数据库实例。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d22b3e25-4d3b-4bd7-ad07-501748d67752/images/34cab6f9-9107-4c3b-98ec-a6d7fa9f298a.png)


 

**AWS 数据迁移架构**

*使用 AWS DMS：*

下图说明了在切换之前向目标 MySQL 数据库发送完整和增量更改所基于 AWS DMS 的数据迁移工作流程。从本地到的网络连接 AWS 取决于 SQL 客户端的要求，不在此模式的范围之内。

![使用 AWS DMS 向 Amazon EC2 上的目标 MySQL 数据库发送数据。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d22b3e25-4d3b-4bd7-ad07-501748d67752/images/c906c45d-fac5-4bb9-b8c8-55e2f9f05fd8.png)


*使用其他 MySQL 工具：*

下图说明了使用 MySQL 工具从本地数据库生成导出转储文件的数据迁移工作流。在割接之前，这些文件将移至 Amazon Simple Storage Service（Amazon S3）并导入到目标 MySQL 数据库。从本地到的网络连接 AWS 取决于 SQL 客户端的要求，不在此模式的范围之内。

![使用原生 MySQL 工具向 Amazon EC2 上的目标 MySQL 数据库发送数据。](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/d22b3e25-4d3b-4bd7-ad07-501748d67752/images/18e88877-7879-4a99-b985-25c56bf7c35f.png)


备注：
+ 根据停机时间考虑因素和最终转换的数据库大小，您可以使用 AWS DMS 或其他变更数据捕获 (CDC) 工具来最大限度地缩短切换时间。当您使用诸如之类的 CDC 工具时 AWS DMS，可以在几分钟内迁移到目标数据库。 
+ 如果根据数据库大小和网络延迟，可以在较短的割接时间窗内完成迁移，采用 **mysqldump** 的离线策略即可满足需求。（我们建议您执行测试以获得大致时间。）
+ 通常，与离线选项相比，CDC策略 AWS DMS 需要更多的监控和复杂性。

## 工具
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-tools"></a>

**AWS 服务**
+ [AWS Database Migration Service (AWS DMS)](https://docs.aws.amazon.com/dms/latest/userguide/Welcome.html) 支持多个源数据库和目标数据库。有关支持的 MySQL 源数据库和目标数据库的信息 AWS DMS，请参阅[使用与 MySQL 兼容的数据库作为源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MySQL.html)和[使用兼容 MySQL 的数据库作为](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.MySQL.html)目标。 AWS DMS如果您的源数据库不受支持 AWS DMS，则必须选择其他方法来迁移数据。

**其他工具**
+ [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html) 是 MySQL 实用程序，用于从 MySQL 数据库创建转储文件，以实现备份或迁移目的。
+ [Percona XtraBackup 是一个](https://www.percona.com/mysql/software/percona-xtrabackup)开源实用程序，用于在 MySQL 数据库上执行非阻塞备份。

## 操作说明
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-epics"></a>

### 计划迁移
<a name="plan-the-migration"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 验证数据库版本。 | 验证源数据库和目标数据库的版本。有关支持的 MySQL 版本的信息 AWS DMS，请参阅 AWS DMS 文档 AWS DMS中的[源 AWS DMS](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Sources.html)和[目标](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html)。 | 数据库管理员 | 
| 确定目标操作系统。 | 确定目标操作系统的版本。有关 Amazon EC2 支持的目标操作系统的列表，请参阅 A [mazon EC2 FAQs](https://aws.amazon.com/ec2/faqs/)。 | 数据库管理员、系统管理员 | 
| 确定硬件要求。 | 根据 MySQL 兼容性列表和容量要求，确定[目标服务器实例](https://aws.amazon.com/rds/instance-types/)的硬件要求。 | 数据库管理员、系统管理员 | 
| 确定存储要求。 | 确定目标数据库的存储类型和容量。 | 数据库管理员、系统管理员 | 
| 识别网络要求。 | 确定网络要求，例如延迟和带宽。 | 数据库管理员、系统管理员 | 
| 选择目标实例类型。 | 根据容量、存储功能和网络功能选择[目标实例类型](https://aws.amazon.com/rds/instance-types/)。 | 数据库管理员、系统管理员 | 
| 确定安全要求。 | 确定源数据库和目标数据库的网络或主机访问安全要求。 | 数据库管理员、系统管理员 | 
| 识别用户。 | 确定安装 MySQL 软件所需的操作系统用户列表。有关更多信息，请参阅 [MySQL 文档](https://dev.mysql.com/doc/mysql-security-excerpt/en/access-control.html)。 | 数据库管理员、系统管理员 | 
| 确定备份策略。 |  | 数据库管理员 | 
| 确定可用性要求。 |  | 数据库管理员 | 
| 确定应用程序迁移或切换策略。 |  | 数据库管理员、系统管理员 | 

### 配置基础设施
<a name="configure-the-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）和子网。 | 配置路由表、互联网网关、NAT 网关和子网。有关更多信息，请参阅 Amazon VPC 文档中的 [VPC 配置选项](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc-options.html)。 | 系统管理员 | 
| 创建安全组和网络访问控制列表 (ACLs)。 | 根据您的要求配置端口（MySQL 的默认值为 3306）和 CIDR 范围或特 IPs 定。 | 系统管理员 | 
| 配置并启动 EC2 实例。 | 有关说明，请参阅 Amazon EC2 文档中的[启动 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/LaunchingAndUsingInstances.html)。 | 系统管理员 | 

### 安装 MySQL 软件
<a name="install-mysql-software"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建用户和组。 | 创建需要访问服务器及数据库的操作系统用户和组。有关更多信息，请参阅 MySQL 文档中的[访问控制和账户管理](https://dev.mysql.com/doc/refman/en/access-control.html)。 | 数据库管理员、系统管理员 | 
| 下载 MySQL。 | 下载 MySQL 软件。有关说明和二进制文件，请参阅 MySQL 文档中的[安装 MySQL](https://dev.mysql.com/doc/refman/en/installing.html)。 | 数据库管理员、系统管理员 | 
| 在 EC2 实例上安装 MySQL 并配置服务器。 | 连接到 EC2 实例并安装 MySQL 软件。有关更多信息，请参阅 Amazon EC2 文档中的[连接到您的 EC2 实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect.html)。 | 数据库管理员、系统管理员 | 

### 迁移数据 - 选项 1
<a name="migrate-data-option-1"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用原生 MySQL 或第三方工具迁移数据。 | 此选项使用原生 MySQL 工具或第三方工具迁移数据库对象及数据。有关说明，请参阅 [mysqldump](https://dev.mysql.com/doc/refman/en/mysqldump.html) 或 [Percona XtraBackup](https://docs.percona.com/percona-xtrabackup/2.4/index.html)（用于物理迁移）的文档。有关使用这些工具的更多信息，请参阅 AWS 博客文章 MySQL 到 Amazon RDS for [MySQL 或 Amazon Aurora MySQL 的迁移选项](https://aws.amazon.com/blogs/database/migration-options-for-mysql-to-amazon-rds-for-mysql-or-amazon-aurora-mysql/)。 | 数据库管理员 | 

### 迁移数据 - 选项 2
<a name="migrate-data-option-2"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用迁移数据 AWS DMS。 | 有关更多信息，请参阅 AWS DMS 文档[AWS DMS中的高级视图](https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.HighLevelView.html)。 | 数据库管理员 | 

### 为割接做准备
<a name="prepare-for-cutover"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 收集对象计数。 | 从源数据库和新的目标数据库收集对象计数。修复目标数据库中的任何不一致之处。 | 数据库管理员 | 
| 检查依赖项。 | 确认与其他数据库之间的依赖关系（链接）仍然有效且运行正常。 | 数据库管理员 | 
| 测试。 | 如果这是测试周期，请执行查询测试、收集指标以及修复任何问题。 | 数据库管理员 | 

### 割接
<a name="cut-over"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 移动客户端。 | 将应用程序客户端切换至新基础设施。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 提供支持。 | 在功能性应用程序测试期间提供支持。 | 数据库管理员 | 

### 关闭项目
<a name="close-the-project"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭资源。 | 关闭 AWS DMS 复制实例和其他临时 AWS 资源。 | 数据库管理员、系统管理员 | 
| 查看项目文档。 | 查看和验证项目文档。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 收集指标。 | 收集各项指标，例如迁移所需时间、人工修改与工具辅助修改的比例，以及成本节约情况。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 完成项目结案。 | 完成项目结案并提供反馈。 | 数据库管理员、应用程序所有者、系统管理员 | 
| 停用源数据库。 | 停用本地 MySQL 数据库。 | 数据库管理员、系统管理员 | 

## 相关资源
<a name="migrate-an-on-premises-mysql-database-to-amazon-ec2-resources"></a>

**参考**
+ [Amazon EC2 文档](https://docs.aws.amazon.com/ec2/)
+ [AWS DMS 文档](https://docs.aws.amazon.com/dms/)
+ [Amazon EC2 定价](https://aws.amazon.com/ec2/pricing/)
+ [AWS DMS Step-by-Step 演练](https://docs.aws.amazon.com/dms/latest/sbs/DMS-SBS-Welcome.html)
+ [mysqldump](https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html)
+ [Percona XtraBackup](https://www.percona.com/mysql/software/percona-xtrabackup)

**教程和视频**
+ [入门 AWS DMS](https://aws.amazon.com/dms/getting-started/)
+ [Amazon EC2 简介 – 通过 AWS实现弹性云服务器和托管](https://www.youtube.com/watch?v=TsRBftzZsQo)（视频）