将 SQL Server 2022 数据库备份到 MinIO

在这里插入图片描述

Microsoft 在将 S3 连接器和 Polybase 添加到 SQL Server 2022 时取得了重大飞跃。因此,企业可以利用他们保存到对象存储中的大量数据,并使用它来丰富 SQL Server 表。他们还可以利用对象存储来备份 SQL Server,这是开放性和云原生灵活性的又一次巨大飞跃。

对象存储在备份和恢复领域占据主导地位,因为它可靠、可扩展、高性能且不可变。Veeam Backup and Replication v12 将对象存储视为一等公民,Commvault 也是如此。所有主要的备份软件都采用了对象存储,因为它是一种经济高效且安全的备份存储,可以满足当今数据密集型 AI 应用程序的需求。NAS 和 SAN 无法提供相同的性能和效率,因此 MinIO 等对象存储成为本地 SQL Server 备份的唯一选择。

这篇博文将引导你完成实现和测试在 Microsoft Windows 上部署的 SQL Server 2022 的备份到 URL 功能的过程。您将学习如何部署 SQL Server、预置 MinIO 存储桶、创建 IAM 策略以保护对这些存储桶的访问,以及如何在 MinIO 中创建服务账户。我们将使用备份到 URL 来运行 SQL Server 备份和还原。最后,我们将设置 ILM 策略,将旧备份分层到另一个存储分段,并删除更旧的备份。

部署 SQL Server 2022 企业版

如果您部署了 SQL Server 2022,请随意使用它。

如果没有,请安装以下方法之一,并确保同时安装 Polybase:

  • SQL Server 2022 for Docker
  • SQL Server 2022 for Windows
  • SQL Server 2022 for Linux

您还需要一种与 SQL Server 交互的方法:

  • Microsoft SQL Server 管理工作室 (MSSMS)
  • Microsoft sqlcmd 实用工具

确保 SQL Server 正在运行,并使用上述任一工具连接到它。

若要确保所有内容都已正确安装,请运行以下查询以获取 SQL Server 版本、版本和产品级别,如下所示。

SELECT  SERVERPROPERTY('Edition') AS SQLEdition,SERVERPROPERTY('ProductVersion') AS ProductVersion,SERVERPROPERTY('ProductLevel') AS ProductLevel;

部署和配置 MinIO

如果您尚未运行它,请在裸机、Docker 或 Kubernetes 上安装 MinIO。

访问 MinIO 服务器需要 MinIO 客户端 (mc)。以下是在本地安装 mc 的方法。

记下首次运行 MinIO Server 时显示的凭据和 S3 终端节点,因为您将需要它们来为外部数据源配置 SQL Server。

创建 MinIO Bucket

使用 Web 浏览器登录 MinIO,其中包含上一步中提供的管理员凭据、IP 地址和端口。

登录后,单击 Create Bucket 并命名您的存储桶 sql-2022-backups 。确保启用版本控制。

重复上述步骤以创建名为 sql-2022-archives 的第二个存储桶。

配置 IAM 存储桶策略

创建 Identity and Access Management (IAM) 策略以定义与您在上一步中创建的存储桶交互所需的特定权限。下面的 JSON 提供了 s3:ListBuckets3:PutObject s3:GetObject 的权限。该语句定义应用策略的存储桶,尾随表示该 Resource 策略适用于所有存储桶和以 开头的前缀 sql-2022-backups 。 */*

在 MinIO 浏览器中,单击左侧菜单中的策略。然后单击创建策略。

将下面的 JSON 复制并粘贴到新策略中。为策略 Backup 命名,然后单击保存。

{"Version": "2012-10-17","Statement": [{"Action": ["admin:SetTier","admin:ListTier"],"Effect": "Allow","Sid": "EnableRemoteTierManagement"},{"Action": ["s3:PutLifecycleConfiguration","s3:GetLifecycleConfiguration"],"Resource": ["arn:aws:s3:::*"],"Effect": "Allow","Sid": "EnableLifecycleManagementRules"}]
}

创建 SQL Server 凭据

将 SQL Server 配置为使用上一步中的“访问密钥”和“密钥”来创建 SQL Server 凭据。

运行以下 T-SQL 查询,使用目标存储桶、访问密钥和私有密钥创建凭据。该 SECRET 参数包括之前创建的帐户的访问密钥和私有密钥,以冒号分隔。

CREATE CREDENTIAL [s3://<your-MinIO-server>:9000/sql-2022-backups]
WITH IDENTITY = 'S3 Access Key', SECRET   = '<Access Key>:<Secret Key>';

将 SQL Server 2022 数据库备份到 MinIO

您将需要一个数据库来备份,任何数据库都可以。我正在使用 Microsoft 的 WideWorldImporters (WWI) 示例数据库。有关下载和安装 WWI 数据库的说明,请参阅使用 SQL Server 2022 数据湖屋的数据科学和 AI,有关其他信息,请参阅 Microsoft SQL 的广阔世界导入程序示例数据库。

T-SQL BACKUP DATABASE 命令需要多个参数:

  • TO URL = xxx 存储桶和备份文件的完整路径

  • WITH FORMAT 允许覆盖现有备份文件。如果没有此参数,如果文件已存在,则备份将失败。在存储桶上启用版本控制后,可以防止文件被删除

  • COMPRESSION 使 SQL Server Compression 能够创建和发送尽可能小的备份文件

  • MAXTRANSFERSIZE=20971520 (20 MB) 定义用于分段上传的最大备份文件的大小(以字节为单位)。

BACKUP DATABASE WideWorldImporters
TO URL = 's3://<your-minio-server>:9000/sql-2022-backups/WideWorldImporters.bak'
WITH FORMAT, COMPRESSION, MAXTRANSFERSIZE = 20971520;

WITH FORMAT, COMPRESSION, MAXTRANSFERSIZE = 20971520;

Processed 1608 pages for database 'WideWorldImporters', file 'WWI_Primary' on file 1.
Processed 53112 pages for database 'WideWorldImporters', file 'WWI_UserData' on file 1.
Processed 3865 pages for database 'WideWorldImporters', file 'WWI_InMemory_Data_1' on file 1.
Processed 347 pages for database 'WideWorldImporters', file 'WWI_Log' on file 1.
BACKUP DATABASE successfully processed 58932 pages in 8.771 seconds (52.491 MB/sec).Completion time: 2024-01-10T17:04:36.6181820-08:00

版本控制备份

使用参数 FORMAT 时,现有备份将被新备份替换,但旧版本仍可通过 MinIO 版本控制使用。

再运行上述备份命令 2 次。MinIO 是不可变的,从不覆盖数据。因此,将保留以前的版本,并且您可以使用 --versions 该标志查看它们。

$ mc ls --versions myminio/sql-2022-backups/
[2024-01-11 17:39:03 PST] 1.3GiB STANDARD c635324e-e643-441c-970f-3da5308e8bbd v3 PUT WideWorldImporters.bak
[2024-01-11 17:33:33 PST] 1.3GiB STANDARD a5f73f90-eb68-4f09-b5eb-0643ca413ccf v2 PUT WideWorldImporters.bak
[2024-01-10 17:04:36 PST] 135MiB STANDARD f2d9a2b3-3d94-49a4-a835-d815a14fac32 v1 PUT WideWorldImporters.bak

有关使用版本化对象的更多信息,请参阅使用 MinIO 版本控制和倒带进行持续数据保护。

还原数据库

如果发生故障,则必须按逻辑顺序还原 SQL Server 备份,然后恢复数据库。您可以还原完整的数据库、数据文件或数据页。在 Microsoft 的说法中,还原是指将数据和日志从备份复制到数据库的多阶段过程,而恢复是指将数据库返回到稳定、一致和可用的状态。

在此示例中,我们将介绍完整的数据库备份和还原。这是最基本的备份策略。可以还原和恢复完整数据库备份。但是,可能需要还原完整数据库,然后还原差异备份。

还原数据库就像备份数据库一样简单。数据库引擎通过在数据库还原期间执行三个步骤来保证整个数据库可用且逻辑一致:

  • 创建数据库和事务日志(如果尚不存在)

  • 将所有数据、日志和索引页从备份复制到数据库文件

  • 应用事务日志进行恢复

还原数据库时,有两个选项:

  • 恢复。。。WITH REPLACE 在执行还原时覆盖现有数据库。SQL Server 将忽略事务日志中的任何活动内容,而只是还原数据库备份。

  • 第二种选择是恢复为新数据库,保持原始数据库不变。

还原和替换数据库:

RESTORE DATABASE WideWorldImporters
FROM URL = 's3://minio.example.net:9000/sql-2022-backups/wideworldimporters.bak'
WITH REPLACE;

要将数据库还原为新数据库,请执行以下操作:

RESTORE DATABASE [WideWorldImporters-copy] 
FROM URL = 's3://minio.example.net:9000/sql-2022-backups/WideWorldImporters.bak'
WITH FILE = 1,  
MOVE N'WideWorldImporters' TO N'C:\SQL2022\Data\WideWorldImporters-copy.mdf',  
MOVE N'WideWorldImporters_log' TO N'C:\SQL2022\Log\WideWorldImporters-copy_log.ldf'

SQL Server 2022 备份的生命周期管理

大多数企业不会简单地将所有数据库(并保留所有版本)备份到同一个存储桶中。将旧版本的备份存储在高性能热层上效率不高,因为它们可能只能在数据库恢复方案中访问。我们将根据保留策略将备份移动到备用存储层。

我们将利用 MinIO 的生命周期管理功能,将超过 10 天的备份的非当前版本从原始存储桶过渡到具有冷层(针对容量优化)存储的集群上的第二个存储桶。我们将使用免费的 MinIO Play。

在第二个 MinIO 集群上创建存储桶。

mc mb play/sql-2022-archives

创建用于生命周期管理的用户和策略。下载并自定义 JSON 示例策略,使用源集群的别名,并确保分配安全密钥。

get -O - https://min.io/docs/minio/linux/examples/LifecycleManagementAdmin.json | \
mc admin policy create myminio LifecycleAdminPolicy /dev/stdin
mc admin user add myminio myminioLifecycleAdmin jki234huihsdu23
mc admin policy attach myminio LifecycleAdminPolicy --user=myminioLifecycleAdmin

配置远程存储层

mc ilm tier add minio myminio ARCHIVE --endpoint https://play.min.io:9000 --access-key Q3AM3UQ867SPQQA43P2F --secret-key zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG --bucket sql-2022-backups --storage-class STANDARD --insecureAdded remote tier ARCHIVE of type minio

创建并应用转换规则。您将指定源集群和存储桶、要转换到的层以及转换规则。以下命令创建一个策略,用于将所有超过 10 天的非当前版本的备份转换为您刚刚创建的层。

mc ilm rule add myminio/sql-2022-backups --noncurrent-transition-days 10 --noncurrent-transition-tier ARCHIVELifecycle configuration rule added with ID `cmgr9qht2ketkof3o2h0` to myminio/sql-2022-backups.

最后,确保规则配置正确:

mc ilm rule ls myminio/sql-2022-backups┌─────────────────────────────────────────────────────────────────────────┐
│ Transition for older versions (NoncurrentVersionTransition)             │
├──────────────────────┬─────────┬────────┬──────┬──────────────┬─────────┤
│ ID                   │ STATUS  │ PREFIX │ TAGS │ DAYS TO TIER │ TIER    │
├──────────────────────┼─────────┼────────┼──────┼──────────────┼─────────┤
│ cmgr9qht2ketkof3o2h0 │ Enabled │ -      │ -    │           10 │ ARCHIVE │
└──────────────────────┴─────────┴────────┴──────┴──────────────┴─────────┘

有关更多详细信息,请参阅将对象转换为远程 MinIO 部署。

备份到多个 URL

Microsoft 指出,您可以通过跨多个对象条带化备份并使用多个 URL 并行写入来提高性能。您最多可以使用 64 个 URL,每个 URL 等同于作为备份一部分的对象。目前,单个备份文件的大小限制为 100GB;如果要备份的数据库超过 100GB,则需要使用多个 URL。

您需要做的就是添加与条带一样多 TO_URL 的参数,其余的由 SQL Server 处理。备份名称可以是您想要的任何名称,但部件需要按顺序编号。

下面是一个包含 6 个 URL 的示例

BACKUP DATABASE WideWorldImporters
TO URL = 's3://minio.example.net:9000/sql-2022-backups/wwi-part1.bak',URL = 's3://minio.example.net:9000/sql-2022-backups/wwi-part2.bak',URL = 's3://minio.example.net:9000/sql-2022-backups/wwi-part3.bak',URL = 's3://minio.example.net:9000/sql-2022-backups/wwi-part4.bak',URL = 's3://minio.example.net:9000/sql-2022-backups/wwi-part5.bak',URL = 's3://minio.example.net:9000/sql-2022-backups/wwi-part6.bak'
WITH FORMAT, COMPRESSION, MAXTRANSFERSIZE = 20971520;   

成功完成后,查询将返回如下内容:

Processed 2032 pages for database 'WideWorldImporters', file 'WWI_Primary' on file 1.
Processed 324296 pages for database 'WideWorldImporters', file 'WWI_UserData' on file 1.
Processed 82130 pages for database 'WideWorldImporters', file 'WWI_InMemory_Data_1' on file 1.
Processed 43238 pages for database 'WideWorldImporters', file 'WWI_Log' on file 1.
BACKUP DATABASE successfully processed 451696 pages in 67.187 seconds (52.523 MB/sec).Completion time: 2024-01-11T17:27:15.0091707-08:00

如您所见,在这种情况下,使用多个 URL 会减慢备份速度。

本地 SQL Server 2022 备份

性能和可靠性是决定灾难恢复工作成败的关键因素。SQL Server 2022 能够备份到对象存储并从对象存储还原,充分利用 MinIO 实现可扩展、快速且简单的备份存储。

MinIO 提供软件定义的备份目标,该目标操作简单,但性能高且可扩展。结果是,使用 MinIO 作为备份目标的 SQL Server 2022 客户实现了巨大的成本节约和本地备份的灵活性。

立即下载 MinIO,了解 SQL Server 2022 的对象存储集成。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4 添加按键输入事件 并在蓝图中使用按键输入节点

绑定按键 选择Edit/ProjectSettings/Engine/Input 在bindings中可以选择添加ActionMappings或则AxisMappings ActionMappings:按键事件&#xff0c;有按下和抬起两个事件&#xff0c;需要分别用两个键触发AxisMappings:输入事件&#xff0c;返回值为float&#xff0c;对于键盘…

每日OJ题_算法_滑动窗口⑤_力扣904水果成篮

目录 力扣904. 水果成篮 解析及代码1&#xff08;使用容器&#xff09; 解析及代码2&#xff08;开数组&#xff09; 力扣904. 水果成篮 904. 水果成篮 - 力扣&#xff08;LeetCode&#xff09; 难度 中等 你正在探访一家农场&#xff0c;农场从左到右种植了一排果树。这…

Elastic Stack(1):Elastic Stack简介

1 简介 ELK是一个免费开源的日志分析架构技术栈总称&#xff0c;官网https://www.elastic.co/cn。包含三大基础组件&#xff0c;分别是Elasticsearch、Logstash、Kibana。但实际上ELK不仅仅适用于日志分析&#xff0c;它还可以支持其它任何数据搜索、分析和收集的场景&#xf…

GLM-4多模态重磅更新!摸着OpenAI过河!

智谱CEO张鹏说&#xff1a;OpenAI摸着石头过河&#xff0c;我们摸着OpenAI过河。 摸来摸去摸了一年&#xff0c;以每3-4个月升级一次基座模型的速度&#xff0c;智谱摸着OpenAI过河的最新成绩到底怎么样&#xff1f;真如所说吗&#xff1f; 听到GLM-4发布的当天&#xff0c;我就…

C++深入之虚函数、虚继承与带虚函数的多基派生问题

基础 在讲解带虚函数的多基派生问题时&#xff0c;我们要先弄清楚不带虚函数的多基派生存在什么样的问题&#xff0c;这样才好弄明白带虚函数的多基派生问题。 多基派生的二义性问题 一般来说&#xff0c;在派生类中对基类成员的访问应当具有唯一性&#xff0c;但在多基继承…

Docker(二)安装指南:主要介绍在 Linux 、Windows 10 和 macOS 上的安装

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 安装 Docker Docker 分为 stable test 和 nightly 三个更新频道。 官方网站上有各种环境下的 安装指南&#xff0c;这里主要介绍 Docker 在…

DAZ to maxon 实时面捕52个blendshapes 表情模板基本形中英文对照表

一、转自&#xff1a; DAZ to maxon 实时面捕52个blendshapes 表情模板基本形中英文对照表 - 哔哩哔哩 很多学员反映实时表情怎么就不同步呢&#xff1f;这个问题其实很常见。 第一&#xff1a;表情模板的顺序弄错&#xff0c;导致表情错乱。 第二&#xff1a;表情模板不标准…

AbstractHttpMessageConverter + easyexcell优雅下载附件

介绍 AbstractHttpMessageConverter 是 Spring 框架中用于处理 HTTP 消息转换的抽象基类。它用于处理来自 HTTP 请求的消息,并将其转换为特定的 Java 对象,或者将 Java 对象转换为 HTTP 响应消息。 这个抽象类允许开发人员创建自定义的 HTTP 消息转换器,以便在 Spring MVC…

职务岗位的概念澄清及应用

背景 现在的企业数字化平台中&#xff0c;有一些术语组织管理中的术语&#xff0c;理解上很有歧义&#xff0c;并且命名和应用上简直五花八门&#xff0c;洋相百出&#xff0c;比如&#xff0c;我们的大厂&#xff0c;就把角色这次&#xff0c;可以作为分类、分组的标签就能大…

2024-01-15(SpringMVCMybatis)

1.拦截器&#xff1a;如果我们想在多个handler方法(controller中的方法)执行之前或者之后都进行一些处理&#xff0c;甚至某些情况下需要拦截掉&#xff0c;不让handler方法执行&#xff0c;那么就可以使用SpringMVC为我们提供的拦截器。 拦截器和过滤器的区别&#xff1a;过滤…

基于内容的图像web检索系统

题目&#xff1a;基于内容的图像在线检索系统 简介&#xff1a;基于内容的图像在线检索系统&#xff08;Content Based Online Image Retrieval , 以下简称 CBOIR&#xff09;&#xff0c;是计算机视觉领域中关注大规模数字图像内容检索的研究分支。典型的CBOIR系统&#xff…

分布式事务Seata实战-AT模式(注册中心为Eureka)

大致记录Seata的AT模式下创建项目过程中需要注意的点和可能遇到的问题。 本项目是以官网的给的示例&#xff08;即下图&#xff09;进行创建的&#xff0c;以Eureka为注册中心。 官网&#xff1a;Seata AT 模式 | Apache Seata™ 官方代码示例&#xff1a; 快速启动 | Apac…

算法笔记(动态规划入门题)

1.找零钱 int coinChange(int* coins, int coinsSize, int amount) {int dp[amount 1];memset(dp,-1,sizeof(dp));dp[0] 0;for (int i 1; i < amount; i)for (int j 0; j < coinsSize; j)if (coins[j] < i && dp[i - coins[j]] ! -1)if (dp[i] -1 || dp[…

Doris配置外表以及多个Hive外表的配置

1.场景分析 以Clickhouse、Doris、Starrocks等为代表的mpp分析数据库正在快速的兴起&#xff0c;以其高效查询、跨库整合能力收到广大技术人员的喜爱。本文主要浅显介绍下作者在使用Doris时&#xff0c;通过建立catlog进行跨库查询。 废话不多少&#xff0c;直接上代码 2.相关…

力扣211. 添加与搜索单词 - 数据结构设计

字典树 思路&#xff1a; 设计一棵字典树&#xff0c;每个节点存放单词的一个字符&#xff0c;节点放一个标记位&#xff0c;如果是单词结束则标记&#xff1b;字典树插入&#xff1a; 字典树默认有 26 个 slot 槽代表 a - z&#xff1b;遍历单词&#xff0c;如果字符对应槽存…

Python自动化实战之接口请求的实现

在前文说过&#xff0c;如果想要更好的做接口测试&#xff0c;我们要利用自己的代码基础与代码优势&#xff0c;所以该章节不会再介绍商业化的、通用的接口测试工具&#xff0c;重点介绍如何通过 python 编码来实现我们的接口测试以及通过 Pycharm 的实际应用编写一个简单接口测…

『Open3D』1.10 Tensor数据处理

open3d中实现了自身的数据类型,用于open3d中内部算法的数值计算,但基础使用上与numpy类似。 目录 1、tensor创建 2、tensor数据属性 3、 Tensor数据在CPU与GPU上的转换

Linux/Traceback

Enumeration nmap 使用nmap初步扫描发现只开放了22和80端口&#xff0c;端口详细扫描情况如下 先看看web是什么样子的&#xff0c;打开网站发现有一条留言&#xff0c;显示该站点已经被黑了&#xff0c; 并且留下了后门 查看源代码&#xff0c;可以看到下面的注释 <!--So…

Docker中创建并配置MySQL、nginx、redis等容器

Docker中安装并配置MySQL、nginx、redis等 文章目录 Docker中安装并配置MySQL、nginx、redis等一、创建nginx容器①&#xff1a;拉取镜像②&#xff1a;运行nginx镜像③&#xff1a;从nginx容器中映射nginx配置文件到本地④&#xff1a;重启nginx并重新配置nginx的挂载 二、创建…

LabVIEW精确测量产品中按键力和行程

项目背景 传统的按键测试方法涉及手工操作&#xff0c;导致不一致和效率低下。在汽车行业中&#xff0c;带有实体按键的控制面板非常常见&#xff0c;确保一致的按键质量至关重要。制造商经常在这些组件的大规模、准确测试中遇到困难。显然&#xff0c;需要一个更自动化、精确…