写点什么

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

  • 2025-06-06
    福建
  • 本文字数:3054 字

    阅读完需:约 10 分钟

本文介绍将 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];GOCREATE 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 AdventureWorks2022TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022_Encrypt.bak'WITH FORMAT, COMPRESSION,ENCRYPTION (ALGORITHM = AES_256, SERVER CERTIFICATE = AdventureWorks2022Cert)GO
-- 恢复数据库RESTORE DATABASE AdventureWorks2022FROM 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 AdventureWorks2022TO URL = 's3://<endpoint>:<port>/<bucket>/AdventureWorks2022.bak'WITH BACKUP_OPTIONS = '{"s3": {"region":"us-west-2"}}'
-- 恢复数据库RESTORE DATABASE AdventureWorks2022FROM 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://www.cnblogs.com/lyhabc/p/18691593/sql-server-s3-compatibility-backup-restore

体验地址:http://www.jnpfsoft.com/?from=001YH

用户头像

还未添加个人签名 2025-04-01 加入

还未添加个人简介

评论

发布
暂无评论
SQL Server 2022新功能:将数据库备份到S3兼容的对象存储_数据库_电子尖叫食人鱼_InfoQ写作社区