跳至内容

如何将数据库从 Amazon EC2 实例或本地虚拟机迁移到 Amazon RDS for SQL Server?

3 分钟阅读
0

我想将数据库从 Amazon Elastic Compute Cloud (Amazon EC2) 实例或本地 Microsoft SQL Server 实例迁移到我的 Amazon Relational Database Service (Amazon RDS) for Microsoft SQL Server 实例。

简短描述

请使用以下方法之一迁移数据库:

  • 原生 SQL Server 备份和恢复
  • AWS Database Migration Service (AWS DMS)
  • 事务复制
  • 备份包 (.bacpac) 文件
  • 使用 SQL Server 生成和发布脚本向导导入数据
  • 使用 SQL Server 导入和导出向导导入数据
  • 使用 SQL Server 批量复制程序实用程序导入数据

迁移时间和停机时间取决于您的迁移方法。有关更多详细信息,请参阅 Best practices for migrating to Amazon RDS for SQL Server(迁移到 Amazon RDS for SQL Server 的最佳实践)。

解决方法

原生 SQL Server 备份和恢复

您可以使用原生备份和恢复将 SQL Server 数据库从本地或 Amazon EC2 实例迁移到 Amazon RDS for SQL Server 实例。此方法比使用复制的方法慢,但限制较少。

完成以下步骤:

  1. 创建 Amazon Simple Storage Service (Amazon S3) 存储桶来存储源实例的备份。Amazon S3 存储桶必须与 Amazon RDS 实例位于同一 AWS 区域中。

  2. 创建 AWS Identity and Access Management (IAM) 角色以访问存储桶

  3. 将 SQLSERVER_BACKUP_RESTORE 选项添加到与 Amazon RDS for SQL Server 实例关联的选项组中

  4. 从源实例(本地或 Amazon EC2)创建备份,然后将其复制到您在步骤 1 中创建的 Amazon S3 存储桶中。

  5. 运行以下脚本将备份恢复到 Amazon RDS for SQL Server 实例中:

    exec msdb.dbo.rds_restore_database  
    @restore_db_name='database_name',   
    @s3_arn_to_restore_from='arn:aws:s3:::bucket_name file_name_and_extension';

    注意: 请将 database_name 替换为数据库的名称,将 replace bucket_name 和 file_name_and_extension 分别替换为存储桶和文件的名称。

  6. 运行以下脚本来跟踪备份的状态。如果任务失败,请查看 task_info 列和 Amazon RDS 故障排除指南

    exec msdb.dbo.rds_task_status;

**注意:**您可以备份和恢复差异备份。您也可以恢复日志以恢复到某个时间点。

AWS Database Migration Service (AWS DMS)

完成以下步骤:

  1. 验证使用 SQL Server 作为 AWS DMS 的目标的先决条件和限制。
  2. 创建 AWS DMS 复制实例
  3. 使用 AWS DMS 创建源和目标端点
  4. 创建迁移任务

事务复制

您可以设置从本地或 EC2 SQL Server 实例到 Amazon RDS for SQL Server 实例的事务复制。但是,您只能将 Amazon RDS for SQL Server 实例设为订阅用户。而且,您只能通过推送订阅将本地或 EC2 SQL Server 实例设为发布者或分发者。

**注意:**此方法取决于 EC2 主机名,该主机名在 RDS for SQL Server 中会发生变化。由于此限制,我们建议您仅将此方法用于将数据一次性迁移到 RDS for SQL Server。

备份包 (.bacpac) 文件

.bacpac 文件由复制的元数据和压缩到文件的数据组成。最佳做法是对小于 200 GB 的数据库使用 .bacpack 文件。您可以使用导出/导入或 SQLPackage.exe(命令行)实用程序创建 .bacpac 文件。有关 .bacpac 文件的详细信息,请参阅 Migrate SQL Server databases from an Azure SQL database to Amazon RDS for SQL Server using bacpac method(使用 bacpac 方法将 SQL Server 数据库从 Azure SQL 数据库迁移到 Amazon RDS for SQL Server)。

SQL Server 生成和发布脚本向导

如果您的数据库小于 1 GB,则可以使用生成和发布脚本向导。对于较大的数据库,您可以使用导入和导出向导或批量复制方法来编写数据库架构的脚本。有关生成和发布脚本向导的详细信息,请参阅 Microsoft SQL Server 文档中的如何 生成脚本 (SQL Server Management Studio)

**注意:**确保在 Set Scripting Option(设置脚本选项)页面上选择 Save scripts to specific location(将脚本保存到特定位置)、Advanced(高级)。Advanced(高级)设置为在导入和导出期间在表格中包括或排除对象提供了其他选项。

SQL Server 导入和导出向导

导入和导出向导会创建集成包。集成包用于将数据从您的本地或 Amazon EC2 SQL Server 数据库复制到 Amazon RDS for SQL Server 实例。您可以筛选要复制到 Amazon RDS 实例的特定表。

在运行导入和导出向导之前,请验证它是否可以访问您的网络并为您的安全组配置权限。请参阅 Microsoft SQL Server 文档中的我需要什么权限?

有关导入和导出向导的更多详细信息,请参阅 Microsoft SQL Server 文档中的如何 运行 SQL Server 导入和导出向导

注意:运行导入和导出向导时,请为目标 Amazon RDS for SQL Server 实例选择以下选项:

  • 对于 Server Name(服务器名称),输入 Amazon RDS 数据库实例的端点的名称。
  • 对于 Authentication mode(身份验证模式),选择 SQL Server Authentication(SQL Server 身份验证)。
  • 对于 Username(用户名)和 Password(密码),输入您在 Amazon RDS 实例中创建的主用户。

SQL Server 批量复制程序实用程序

批量复制程序 (bcp) 是一个命令行实用程序,用于在 SQL Server 实例之间批量复制数据。您可以使用 bcp 实用程序将大量数据导入到 SQL Server 实例或导出到文件中。

以下是 INOUT 命令的示例:

**OUT:**使用此命令将表中的记录导出或转储到文件中:

bcp dbname.schema_name.table_name out C:\table_name.txt -n -S localhost -U username -P     password -b 10000

前面的代码包含以下选项:

  • -n:指定批量复制使用要复制的数据的本机数据类型。
  • -S:指定 bcp 实用程序连接的 SQL Server 实例。
  • -U:指定用于登录 SQL Server 实例的 AWS 账户的用户名。
  • -P:为 -U 指定的用户指定密码。
  • -b:指定每批导入数据的行数。

**IN:**使用此命令将转储文件中的所有记录导入表中。您必须先创建表,然后才能运行 bcp 命令。

bcp dbname.schema_name.table_name in C:\table_name.txt -n -S endpoint,port -U master_user_name -P master_user_password -b 10000

有关详细信息,请参阅 Microsoft SQL Server 文档中的 bcp 实用程序

AWS 官方已更新 7 个月前