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/
本文版权归作者全部,未经作者同意不得转载。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |