SQL Server 2022新功能:将数据库备份到S3兼容的对象存储

本文介绍将S3兼容的对象存储用作数据库备份目标所需的概念、要求和组件。 数据库备份和恢复功能在概念上类似于使用SQL Server备份到Azure Blob存储的URL作为备份设备类型。

要注意的是,不只是amazon S3对象存储,只要兼容S3协议的对象存储都可以备份。

对象存储集成功能

SQL Server 2022(16.x)引入了对象存储集成功能,使您可以将SQL Server与S3兼容的对象存储集成。为了提供这种集成,SQL Server支持一个S3连接器,它使用S3 REST API连接到任何S3兼容的对象存储提供商。SQL Server 2022(16.x)通过增加对使用REST API的新S3连接器的支持,扩展了现有的BACKUP/RESTORE TO/FROM URL命令的语法。

  • 指向S3兼容资源的URL以s3://为前缀,表示正在使用S3连接器。以s3://开头的URL始终假定底层协议为https。

  • 文件编号和文件大小限制 为了存储数据,S3兼容对象存储提供商必须将文件分割成多个称为“部分”的块,这类似于微软Azure Blob存储中的块Blob。

S3端点的前提条件

S3端点必须按以下方式配置:

  • 1、必须配置TLS。假定所有连接将通过HTTPS而非HTTP进行安全传输。端点通过安装在SQL Server操作系统主机上的证书进行验证。

  • 2、在S3兼容的对象存储中创建凭据,具有执行操作所需的适当权限。在存储层上创建的用户和密码被称为访问密钥ID(Access Key ID)和秘密密钥ID(Secret Key ID)。您需要这两个密钥才能对S3端点进行身份验证。

  • 3、至少配置了一个存储桶。

Linux平台支持

SQL Server使用 WinHttp 实现其所使用的HTTP REST API客户端。它依赖操作系统证书存储来验证由HTTP(S)端点提供的TLS证书。然而,在Linux平台上运行的SQL Server的CA证书必须放置在一个预定义的位置,即/var/opt/mssql/security/ca-certificates 文件夹中,且该文件夹最多只能存储和支持前50个证书。在启动SQL Server进程之前,必须将CA证书放置在该位置。SQL Server在启动时从该文件夹读取证书,并将它们添加到信任存储中。

示例

  • 创建凭据

凭据的名称应提供存储路径,并且根据存储平台的不同有多个标准。

当使用S3连接器时,IDENTITY应始终为 'S3 Access Key'。 Access Key ID和Secret Key ID中不得包含冒号。 Access Key ID和Secret Key ID是在S3兼容的对象存储上创建的用户名和密码。 Access Key ID 必须具有适当的权限来访问S3兼容的对象存储中的数据。 使用CREATE CREDENTIAL创建服务器级凭据以进行与S3兼容的对象存储端点的身份验证。

AWS S3 支持两种不同的 URL 标准。

S3://<BUCKET_NAME>.S3.<REGION>.AMAZONAWS.COM/<FOLDER>(默认)
S3://S3.<REGION>.AMAZONAWS.COM/<BUCKET_NAME>/<FOLDER>

代码如下:

USE [master];
GO
CREATE CREDENTIAL [s3://<endpoint>:<port>/<bucket>]
WITH
        IDENTITY    = 'S3 Access Key',
        SECRET      = '<AccessKeyID>:<SecretKeyID>';
GO BACKUP DATABASE [SQLTestDB]
TO      URL = 's3://<endpoint>:<port>/<bucket>/SQLTestDB.bak'
WITH    FORMAT ,STATS = 10, COMPRESSION;

有多种方法可以为AWS的S3对象存储创建凭据。

  • S3 存储桶名称:datavirtualizationsample
  • S3 存储桶区域:us-west-2
  • S3 存储桶文件夹:backup
CREATE CREDENTIAL [s3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://datavirtualizationsample.s3.us-west-2.amazonaws.com/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO
--或者
CREATE CREDENTIAL [s3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup]
WITH    
        IDENTITY    = 'S3 Access Key'
,       SECRET      = 'accesskey:secretkey';
GO BACKUP DATABASE [AdventureWorks2022]
TO URL  = 's3://s3.us-west-2.amazonaws.com/datavirtualizationsample/backup/AdventureWorks2022.bak'
WITH COMPRESSION, FORMAT, MAXTRANSFERSIZE = 20971520;
GO

备份到 URL和从 URL 恢复

备份到 URL

以下示例将执行完整的数据库进行备份文件分割,然后备份到对象存储端点:
BACKUP DATABASE <db_name>
TO      URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
WITH    FORMAT ,STATS = 10, COMPRESSION;

从 URL 恢复

以下示例将从对象存储端点位置执行数据库恢复:
RESTORE DATABASE <db_name>
FROM    URL = 's3://<endpoint>:<port>/<bucket>/<database>_01.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_02.bak'
,       URL = 's3://<endpoint>:<port>/<bucket>/<database>_03.bak'
WITH    REPLACE ,  STATS  = 10;

加密和压缩备份选项

以下示例展示如何使用加密和压缩来备份和恢复 AdventureWorks2022 数据库:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>;
GO CREATE CERTIFICATE AdventureWorks2022Cert
    WITH SUBJECT = 'AdventureWorks2022 Backup Certificate';
GO
-- 备份数据库
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH FORMAT, COMPRESSION,
ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = AdventureWorks2022Cert)
GO -- 恢复数据库
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'
WITH REPLACE

使用区域参数进行备份和恢复

以下示例展示如何使用REGION_OPTIONS选项进行备份和恢复 AdventureWorks2022 数据库:

您可以在每个BACKUP / RESTORE命令中添加区域参数。 请注意,在BACKUP_OPTIONS和RESTORE_OPTIONS中使用了S3存储特定的区域字符串, 例如 '{"s3": {"region":"us-west-2"}}'。默认区域是 us-east-1。

-- 备份数据库
BACKUP DATABASE AdventureWorks2022
TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}' -- 恢复数据库
RESTORE DATABASE AdventureWorks2022
FROM URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'
WITH  RESTORE_OPTIONS = '{"s3": {"region":"us-west-2"}}'

SQL Server 2008的压缩备份是一个新特性,根据实际使用中的观察,压缩比至少在1:5左右,也就是备份时增加了压缩选项(COMPRESSION)后可以至少压缩到数据文件大小的20%甚至更低,
可以很大程度上加快备份执行时间,减轻IO压力和节省备份服务器的磁盘存储空间。

-- 备份数据库
BACKUP DATABASE SQLTestDB TO DISK = 'c:\tmp\SQLTestDB.bak' WITH stats =5 , COMPRESSION
GO

总结

SQL Server 2022通过新引入的S3连接器,SQL Server能够支持通过REST API与S3兼容存储集成。用户可以配置存储桶和凭据,通过URL指向存储位置进行备份和恢复。此外,还提供了加密、压缩等备份选项,以及在Linux平台上的特殊配置要求。示例展示了如何创建凭据、执行备份和恢复操作,支持区域参数指定备份和恢复的地域。

参考文章

https://learn.microsoft.com/en-us/sql/relational-databases/backup-restore/sql-server-backup-to-url-s3-compatible-object-storage?view=sql-server-ver16&viewFallbackFrom=sql-server-ver15

https://aws.amazon.com/cn/blogs/modernizing-with-aws/backup-sql-server-to-amazon-s3/

https://www.mssqltips.com/sqlservertip/7302/backup-sql-server-2022-database-aws-s3-storage/

本文版权归作者所有,未经作者同意不得转载。

SQL Server 2022新功能:将数据库备份到S3兼容的对象存储的更多相关文章

  1. SQL Server 2014新功能PPT

        本篇文章是我在公司内部分享SQL Server 2014新功能的PPT,在本PPT中我详细描述了SQL Server除了BI方面的新功能,以及提供了大量的测试.希望对大家有帮助.     请点 ...

  2. 关于SQL Server 2005 的自动远程数据库备份

    原文:(原创)关于SQL Server 2005 的自动远程数据库备份 由于项目需要,需要对目标服务器上的数据库每天进行备份并转移,查阅网上的一些帮助,结合自己的实际需要,写了这篇文章,希望对有同样需 ...

  3. Sql Server 2016新功能之 Row-Level Security

    Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_) 直接上例子.这个功能相当通过对表添加一个函数作为 ...

  4. (原创)关于SQL Server 2005 的自动远程数据库备份

    由于项目需要,需要对目标服务器上的数据库每天进行备份并转移,查阅网上的一些帮助,结合自己的实际需要,写了这篇文章,希望对有同样需求的朋友有所帮助.目标服务器:192.168.1.197,备份服务器:1 ...

  5. SQL Server 2017 新功能分享

    本篇文章是我在MVP直通车分享的关于SQL Server 2017的新功能,现在ppt分享如下,可以点击这里下载.

  6. Sql Server 2016 新功能——内置的 Temporal Tables

    放假之前老大跟我提起了一下2016有个有趣的功能叫 Temporal Table ,今天去看了一下资料整理一下. 这个功能看上去像是临时表,但是其实是系统维护的一个历史记录表.(在某个程度上面比起我们 ...

  7. SQL Server 2016新特性:数据库级别配置

    新的  ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL) 用来配置数据库级别配置. 这个语句可以配置每个数据库的配置: 清理过程cache 设置MA ...

  8. SQL SERVER 2019新功能

    1.错误代码行 BEGIN TRY    SELECT 1/0END TRYBEGIN CATCH    THROW END CATCH2.二级制截断列名值 chose语法

  9. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

  10. SQL Server 2014 新特性:IO资源调控

    谈谈我的微软特约稿:<SQL Server 2014 新特性:IO资源调控> 2014-07-01 10:19 by 听风吹雨, 570 阅读, 16 评论, 收藏, 收藏 一.本文所涉及 ...

随机推荐

  1. java中的集合包简要分析

    1.集合包 集合包是java中最常用的包,它主要包括Collection和Map两类接口的实现. 对于Collection的实现类需要重点掌握以下几点: 1)Collection用什么数据结构实现? ...

  2. 算法(第四版)C# 习题题解——3.2

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...

  3. base64计算文件大小方法(C#和js)

    base64文件大小计算 有时候图片被base64之后需要计算图片大小,因为被编码后全是字符,计算文件大小可以反序列化成文件之后再获取大小,但是会比较麻烦.简单介绍一种利用base64编码原理计算大小 ...

  4. C# 获取系统盘符

    1.使用.net管理对象(引入System.Management) public static List<string> getDisk() { WqlObjectQuery wmique ...

  5. Tailwind CSS样式优先级控制

    前情 Tailwind CSS 是一个原子类 CSS 框架,它将基础的 CSS 全部拆分为原子级别,能达到最小化项目CSS.它的工作原理是扫描所有 HTML 文件.JavaScript 组件以及任何模 ...

  6. Java模拟Oracle函数MONTHS_BETWEEN注意事项

    Java模拟Oracle函数MONTHS_BETWEEN注意事项 MONTHS_BETWEEN(DATE1, DATE2) 用来计算两个日期的月份差. 最近接到一个迁移需求,把Oracle SQL接口 ...

  7. IOS获取蓝牙状态

    IOS获取蓝牙状态 监听蓝牙状态 在Link Binaries With Libraries中添加CoreBluetooto.framework 创建CBCentralManager对象 为了避免每次 ...

  8. 准备 OpenXML 开发环境

    Development with Open XML 1. 准备开发环境 1.1 Open XML SDK 现在最新的 OpenXML SDK 版本是 2.12.1 (2021/1),需要通过 NuGe ...

  9. GraphQL Part I: hello, world.

    GraphQL with ASP.NET Core (Part- I : Hello World) 厌倦了 REST? 让我们谈一下 GraphQL, GraphQL 提供声明式的方式从服务器获取数据 ...

  10. 【C#】【桌面应用开发】拖拽文件到文本框获得所拖拽文件的路径

    步骤1:设置文本框属性 设置文本框属性,将属性AllowDrop改为True 使其允许拖拽文件 步骤2: 在控件事件管理中双击DragEnter,添加事件 private void Form_sett ...