【问题标题】:How to backup Amazon RDS MS SQL Server database instance and restore locally如何备份 Amazon RDS MS SQL Server 数据库实例并在本地恢复
【发布时间】:2014-06-25 20:10:24
【问题描述】:

是否可以使用 Microsoft SQL Server Management Studio 中的标准任务 -> 备份和任务 -> 恢复功能创建在 Amazon RDS 实例上运行的数据库的备份并在本地计算机上恢复它?如果是这样,你会怎么做?

请注意,这个问题与您是否可以批量复制数据或生成脚本无关,而是您是否可以创建一个可以使用 SSMS 恢复功能恢复的真正的 .BAK 数据库备份。

【问题讨论】:

标签: sql-server amazon-web-services amazon-rds


【解决方案1】:

您目前无法从 amazon rds 创建 .bak 文件。我处理这个问题的方法是使用 azure 迁移向导,它恰好也适用于 amazon rds。

我启动了一个安装了 SQL Server 和迁移向导的 EC2 实例。然后我使用迁移工具将 RDS 数据库复制到 ec2 实例。

完成后,您可以从 EC2 实例上运行的 SQL Server 创建一个 .bak 文件。它很痛苦,但它有效。如果您有带宽或您的数据库很小,您可以直接在目标机器上使用迁移工具。

http://sqlazuremw.codeplex.com

【讨论】:

【解决方案2】:

您现在可以将 bak 文件导出到 S3 中。以下是说明:http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html

这是一个快速的 sn-p,它将生成一个备份:

exec msdb.dbo.rds_backup_database 
    @source_db_name='database_name', 
    @s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension',
    @overwrite_S3_backup_file=1;

在此功能之前,我可以得到一个bacpac,在我的情况下效果很好。在 SSMS 中,右键单击数据库 > 任务 > 导出数据层应用程序。

我能够毫无问题地将其导入我的服务器。

【讨论】:

    【解决方案3】:

    您可以从 AWS RDS 本地创建备份。 使用 SQL Management Studio,右键单击您的数据库 > 任务 > 导出数据

    您只需选择正确的“数据源”,例如源和目标都使用“SQL Server Native 11”。

    在 AWS 文档页面中有很好的描述: http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html#SQLServer.Procedural.Exporting.SSIEW

    部分:“SQL Server 导入和导出向导”

    【讨论】:

    • 这是批量复制数据的好方法。但是,这并不是真正的备份,因为它不会复制任何键、索引、约束等。
    【解决方案4】:

    您不仅可以使用本机 sql server 备份,还可以使用任何其他 sql server 功能进行数据迁移。我会强调以下解决您的案例的选项。

    Sql server 原生备份

    1.Native sql server 备份\恢复

    RDS Sql Server 不支持 T-SQL CREATE DATABASE 命令。但是,您可以使用存储过程在 S3 上进行本机备份

    EXEC [msdb].[dbo].[rds_backup_database]
    @source_db_name = '<database name>',
    @S3_arn_to_backup_to = N'arn:aws:s3:::<bucket name>/sample.backup'
    

    要使这个存储过程正常工作,您需要做一些预先配置。更多详情可查看here

    从速度的角度来看——创建本机备份将是最优化的,但这种方法使用起来不是很方便。启动时,存储过程不会直接创建备份,而是创建需要监控的“任务”。并且只有在成功完成此任务后,您才能将备份从 S3 复制到本地服务器。

    要将备份文件恢复到本地服务器,请使用 SSMS:数据库 -> 右键单击​​ -> 恢复数据库

    2。导出\导入数据层应用程序

    Export\import bacpac 是一种将数据库从一台服务器迁移到另一台服务器的机制。您可以使用 SSMS 或 sqlpackage 实用程序导出/导入数据库。

    • 通过 SSMS

      1. 打开 SSMS
      2. 右键单击数据库
      3. 任务 -> 导出数据层应用程序
    • 通过sqlpackage.exe

      sqlpackage.exe /action:Export /SourceServerName: /SourceDatabaseName: /SourceUser:admin /SourcePassword: /TargetFile: /p:ExtractAllTableData=True

    导出数据层应用程序不保证事务数据的一致性。为了使导出的文件在事务上保持一致,您需要确保在数据导出过程中没有写入操作。

    要将 .bacpac 文件恢复到本地服务器,请使用 SSMS:数据库 -> 右键单击​​ -> 导入数据层应用程序

    有关这两个选项的更多详细信息可以找到here

    3.生成t-sql脚本

    如果您的数据库不是很大,那么您可以创建一个包含恢复数据库指令的 T-SQL 脚本。

    1. 打开 SSMS
    2. 右键单击数据库
    3. 任务 -> 生成脚本
    4. 在设置脚本选项步骤转到高级
    5. 将脚本的数据类型设置为“架构和数据”值

    创建 t-sql 脚本是复制数据库最慢但也是最灵活的方法。在高级设置中,您可以选择多种脚本创建选项。

    与导出数据层应用程序一样,需要确保在导出期间没有对数据库的写入操作。

    要恢复到本地服务器,请将文件拖到 SSMS 中并按 F5。但如果文件太大,则使用sqlcmd 实用程序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2015-01-17
      • 2018-09-01
      • 2012-12-12
      • 1970-01-01
      • 2018-12-18
      • 2015-02-10
      相关资源
      最近更新 更多