惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
SegmentFault 最新的问题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
Y
Y Combinator Blog
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
J
Java Code Geeks
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
Jina AI
Jina AI
The GitHub Blog
The GitHub Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Check Point Blog
M
MIT News - Artificial intelligence
Last Week in AI
Last Week in AI
V
V2EX
腾讯CDC
F
Fortinet All Blogs
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss

博客园 - 桦仔

预算有限只能用 SQL Server 标准版?3 套高可用方案,2 台机器就能落地 SQL Server 2025 新功能概览分享 对齐规则太 “苛刻”,PostgreSQL表变大的 3 个核心原因 SQL Server 2025数据库引擎新特性汇总 并发控制机制大揭秘:解析SQL Server与PostgreSQL的并发控制策略 SQL Server 2025中解决“写写阻塞”的利器 揭开SQL Server和PostgreSQL填充因子的神秘面纱 为什么PostgreSQL不自动缓存执行计划?这可能是最硬核的优化解读 为何PostgreSQL没有聚集索引?解读两大数据库的设计差异 SQL Server 2025 中的改进 MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题 理解PostgreSQL和SQL Server中的文本数据类型 MongoDB 8.0这个新功能碉堡了,比商业数据库还牛 深度对比:PostgreSQL 和 SQL Server 在统计信息维护中的关键差异 只需简单5步,Ansible脚本自动搭建AlwaysOn集群(已测试通过,可实际运行) 五分钟搞定!Linux平台上用Ansible自动化部署SQL Server AlwaysOn集群 一分钟搞定!CentOS 7.9上用Ansible自动化部署SQL Server 2019 从DNS配置到Pacemaker部署:一步步教你在Linux平台上实现AlwaysOn集群 低成本高可用方案!Linux系统下SQL Server数据库镜像配置全流程详解 从 $PGDATA 到文件组:深入解析 PostgreSQL 与 SQL Server 的存储策略
SQL Server 2022新功能:将数据库备份到S3兼容的对象存储
桦仔 · 2025-02-10 · via 博客园 - 桦仔

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 TO /RESTORE FROM URL命令的语法。

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

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

  • 单个 URL 支持的备份文件大小为 200GB(当 MAXTRANSFERSIZE 设置为 20 MB 时)。单个备份文件最多可拆分到最多 64 个 URL,意味着通过备份分块功能,可拆分备份集以支持最大单个数据库 12.8 TB 的备份文件大小(https://www.cnblogs.com/lyhabc/p/4173903.html)。

S3端点的前提条件

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

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

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

  • 3、至少配置了一个存储桶bucket,也就是在对象存储提供商的配置界面上提前创建好存储桶 ,不能在SQL Server里创建存储桶bucket.

Linux平台支持

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

Linux 上的 SQL Server 会将证书验证委托给 SQLPAL,SQLPAL会通过自身附带的证书验证端点的 HTTPS 证书。

SQL Server 会在启动时读取该文件夹中的证书,并将其添加到PAL信任存储。如果 /var/opt/mssql/security/ca-certificates路径下没有任何证书,数据库启动时会如下错误:

2022-02-05 00:32:10.86 Server Installing Client TLS certificates to the store.
2022-02-05 00:32:10.88 Server Error searching first file in /var/opt/mssql/security/ca-certificates: 3(The system cannot find the path specified.)

示例

  • 创建凭据

凭据的名称尽量使用存储路径,以更好的进行区分,并且根据存储平台的不同有多个标准。

当使用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指向存储位置进行备份和恢复。此外,备份命令依然支持SQL2014的加密和SQL2008的压缩等备份选项,以及在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/

 

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