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. Python:pygame游戏编程之旅五(游戏界面文字处理详解)

    再简单的游戏界面中均涉及文字处理,本节主要解读一下pygame模块中对文字及字体的处理方式. 同样,以实例进行讲解,先看看代码: #!/usr/bin/env python # -*- coding: ...

  2. Prometheus之系统安装,启动

    Prometheus简介Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包. 自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人 ...

  3. DevEco Studio:状态管理与事件处理

    DevEco Studio:状态管理与事件处理 引言 在现代前端开发中,状态管理和事件处理是构建交互式应用的核心.DevEco Studio,作为华为推出的开发环境,支持开发者使用TypeScript ...

  4. 启动Node.js前端项目

    跟前端同事联调的时候,有时前端同事要跟其他后端同事联调,心想就自己启个前端项目,这样前端同事跟其他后端同事联调的时候,我可以先自己调来试试. 安装Node.js,NPM,NVM等,一气呵成.将前端项目 ...

  5. vscode本地调试gitbook

    1. windows下载安装git 2.安装nodejs 下载安装nvm https://github.com/coreybutler/nvm-windows/releases/download/1. ...

  6. ajax请求与前后端交互的数据编码格式

    目录 一.Ajax AJAX简介 应用场景 AJAX的优点 语法实现 二.数据编码格式(Content-Type) 写在前面 form表单 几种数据编码格式介绍 三.ajax携带文件数据 四.ajax ...

  7. 微信小程序无法抓包

    1.问题 1.1. 问题描述 夜神模拟器中,微信小程序请求超时(是因为开了抓包程序) 1.2. 问题截图 2.解决问题 2.1. 步骤 开启调试模式,之后重启小程序 2.2. 结果

  8. 【转载】获取Java接口的所有实现类

    https://www.cnblogs.com/wangzhen-fly/p/11002814.html 前言:想看基于spring 的最简单实现方法,请直接看 第七步. 本文价值在于 包扫描的原理探 ...

  9. vue3 路由-导航守卫

    假设用户登录,在地址栏输入了Login,人性化的设计应该自动回到home页面.或者用户输入不存在路由,也应该回到home页面. 这个时候需要用到vue-router的导航守卫功能. 在我们封装的rou ...

  10. 以大模型攻大模型之💫Jailbreaking Black Box Large Language Models in 🎢Twenty Queries

    "在高层次上,PAIR将两个黑盒LLMs--我们称之为攻击者和目标--相互对抗--"具体是如何对抗的?请各位看官仔细阅读~