快速入门:SQL 备份并还原到 S3 兼容对象存储

适用于: SQL Server 2022 (16.x)

本快速入门有助了解如何将备份写入与 S3 兼容的对象存储以及如何从中还原。

注意

SQL Server 2022 引入了对备份到 S3 兼容的对象存储以及从中还原的支持。 SQL Server 2019 和以前的版本不支持此功能。

先决条件

要完成本快速入门,你必须熟悉 SQL Server 备份和还原概念以及 Transact-SQL (T-SQL) 语法。 需要 S3 端点、SQL Server Management Studio (SSMS),以及对运行 SQL Server 的服务器或 Azure SQL 托管实例的访问权限。 此外,用于发出 BACKUP 和 RESTORE 命令的帐户应属于具有 ALTER ANY CREDENTIAL 权限的 db_backupoperator 数据库角色,并且具有用于还原到新数据库的 CREATE DATABASE 权限,或者是 sysadmindbcreator 固定服务器角色的成员,或者是数据库所有者(dbo)的成员(如果通过现有数据库进行还原)。

创建测试数据库

在此步骤中,使用 SQL Server Management Studio (SSMS) 创建测试数据库。

  1. 启动 SQL Server Management Studio (SSMS) 并连接到 SQL Server 实例。

  2. 打开“新建查询”窗口

  3. 运行以下 T-SQL 代码来创建测试数据库。 刷新对象资源管理器中的“数据库”节点,查看新数据库。 SQL 托管实例上新建的数据库会自动启用 TDE,因此需要禁用它才能继续操作。

    USE [master];
    GO
    
    -- Create database
    CREATE DATABASE [SQLTestDB];
    GO
    
    -- Create table in database
    USE [SQLTestDB];
    GO
    CREATE TABLE SQLTest (
        ID INT NOT NULL PRIMARY KEY,
        c1 VARCHAR(100) NOT NULL,
        dt1 DATETIME NOT NULL DEFAULT GETDATE()
    );
    GO
    
    -- Populate table 
    USE [SQLTestDB];
    GO
    
    INSERT INTO SQLTest (ID, c1) VALUES (1, 'test1');
    INSERT INTO SQLTest (ID, c1) VALUES (2, 'test2');
    INSERT INTO SQLTest (ID, c1) VALUES (3, 'test3');
    INSERT INTO SQLTest (ID, c1) VALUES (4, 'test4');
    INSERT INTO SQLTest (ID, c1) VALUES (5, 'test5');
    GO
    
    SELECT * FROM SQLTest;
    GO
    
    -- Disable TDE for newly-created databases on SQL Managed Instance 
    USE [SQLTestDB];
    GO
    ALTER DATABASE [SQLTestDB] SET ENCRYPTION OFF;
    GO
    DROP DATABASE ENCRYPTION KEY;
    GO
    

创建凭据

要创建 SQL Server 凭据以用于身份验证,请按以下步骤操作:

  1. 启动 SQL Server Management Studio (SSMS) 并连接到 SQL Server 实例。

  2. 打开“新建查询”窗口

  3. 创建服务器级别凭证。 凭证的名称取决于 S3 兼容的存储平台。 与 PolyBase 数据库范围的凭证不同,备份/还原凭证是在实例级别存储的。 与 S3 兼容存储一起使用时,必须根据 URL 路径对凭证进行命名。

    CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
    WITH
            IDENTITY    = 'S3 Access Key',
            SECRET      = '<AccessKeyID>:<SecretKeyID>';
    GO
    

注意

有关服务器凭证的 S3 兼容存储的更多示例,请参阅 CREATE CREDENTIAL (Transact-SQL)

备份数据库

在此步骤中,使用 T-SQL 将数据库 SQLTestDB 备份到与 S3 兼容的对象存储。

通过运行以下命令,使用 T-SQL 备份数据库:

USE [master];
GO

BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT /* overwrite any existing backup sets */
,       STATS = 10
,       COMPRESSION;

删除数据库

在此步骤中,先删除数据库再执行还原。 此步骤仅适用于本教程,不太可能用于普通的数据库管理过程。 可以跳过此步骤,但之后将需要在 Azure SQL 托管实例上还原过程中更改数据库名,或运行还原命令 WITH REPLACE 以便在本地成功还原数据库。

  1. 展开对象资源管理器中的“数据库”节点,右键单击 SQLTestDB 数据库,然后选择“删除”以启动“删除对象”向导
  2. 在 Azure SQL 托管实例上,选择“确定”以删除数据库。 在本地,选中“关闭现有连接”旁边的复选框,然后选择“确定”以删除数据库

还原数据库

在此步骤中,使用 SQL Server Management Studio 中的 GUI 或 Transact-SQL 还原数据库。

  1. 在 SQL Server Management Studio 的对象资源管理器中右键单击“数据库”节点,然后选择“还原数据库”

  2. 选择“设备”,然后选择省略号 (...) 以选择设备。

    显示“选择恢复设备”屏幕的屏幕截图。

  3. 从“备份介质类型”下拉列表中选择“URL”,然后选择“添加”以添加设备

    显示“添加备份设备”屏幕的屏幕截图。

  4. 输入虚拟主机 URL 并粘贴 S3 兼容对象存储的密钥 ID 和访问密钥 ID。

    “选择 S3 备份文件位置”对话框的屏幕截图,其中填充了 URL 和密钥字段。

  5. 选择“确定”以选择备份文件位置

  6. 选择“确定”,关闭“选择备份设备”对话框

  7. 选择“确定”以还原数据库

以下是一些建议阅读的主题,便于了解概念以及在将 S3 兼容对象存储务用于 SQL S备份时的最佳做法。