将 SQL Server 2022 数据库备份到 MinIO

news2024/11/14 23:08:47

在这里插入图片描述

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 --insecure

Added remote tier ARCHIVE of type minio

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

mc ilm rule add myminio/sql-2022-backups --noncurrent-transition-days 10 --noncurrent-transition-tier ARCHIVE

Lifecycle 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.coloradmin.cn/o/1398402.html

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

相关文章

通达信主图指标修改为文华公式源码

最近有几位朋友说只用过通达信的软件&#xff0c;咨询有没有通达信指标&#xff0c;我做期货一直是用文华的软件&#xff0c;今天有一位炒股的朋友拿着通达信的指标源码让帮忙修改成文华的&#xff0c;经过他同意分享给大家。 这位朋友是用于辅助股票技术分析&#xff0c;建议做…

【llm 微调code-llama 训练自己的数据集 一个小案例】

这也是一个通用的方案&#xff0c;使用peft微调LLM。 准备自己的数据集 根据情况改就行了&#xff0c;jsonl格式&#xff0c;三个字段&#xff1a;context, answer, question import pandas as pd import random import jsondata pd.read_csv(dataset.csv) train_data data…

深度解析 Compose 的 Modifier 原理 -- DrawModifier

" Jetpack Compose - - Modifier 系列文章 " &#x1f4d1; 《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》 &#x1f4d1; 《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》 &#x1f4d1; 《 深入解…

牛客小白月赛86 解题报告 | 珂学家 | 最大子数组和变体 + lazy线段树动态区间树

前言 整体评价 终于回归小白月赛的内核了&#xff0c;希望以后也继续保持&#xff0c;_. A. 水盐平衡 思路: 模拟 题目保证没有浓度相等的情况 盐度 a/b&#xff0c; c/d 的比较关系 演变为 ad, bc 两者的大小关系 #include <bits/stdc.h>using namespace std;int …

【北京】买套二手房需要多少钱?

上次我们看了苏州和上海的二手房&#xff0c;这次我们一起来看下北京的二手房价格如何。 数据来源 数据来自贝壳二手房&#xff0c;每个区最多获取了3千条房源信息&#xff0c;数据共计4万条左右 对数据感兴趣的朋友&#xff0c;公众号后台发送北京二手房获取数据文件 各区房…

面试之Glide如何绑定Activity的生命周期

Glide绑定Activity生命周期 Glide.with() 下面都是它的重载方法&#xff0c;Context&#xff0c;Activity&#xff0c;FragmentActivity, Fragment, android.app.Fragment fragment,View都可以作为他的参数&#xff0c;内容大同小异&#xff0c;都是先getRetriever&#xff0…

【C++入门到精通】智能指针 shared_ptr 简介及C++模拟实现 [ C++入门 ]

阅读导航 引言一、简介二、成员函数三、使用示例四、C模拟实现五、std::shared_ptr的线程安全问题六、总结温馨提示 引言 在 C 动态内存管理中&#xff0c;除了 auto_ptr 和 unique_ptr 之外&#xff0c;还有一种智能指针 shared_ptr&#xff0c;它可以让多个指针共享同一个动…

关于大模型学习中遇到的3

来源&#xff1a;网络 Embedding模型 随着大型语言模型的发展&#xff0c;以ChatGPT为首&#xff0c;涌现了诸如ChatPDF、BingGPT、NotionAI等多种多样的应用。公众大量地将目光聚焦于生成模型的进展之快&#xff0c;却少有关注支撑许多大型语言模型应用落地的必不可少的Embed…

STM32407用汇顶的GT911触摸芯片调试实盘

这个配置很关键 代码 #include "stm32f4xx.h" #include "GT9147.h" #include "Touch.h" #include "C_Touch_I2C.h" #include "usart.h" #include "delay.h" #include "LCD.h" #incl…

HarmonyOS 页面跳转控制整个界面的转场动画

好 本文 我们来说 页面间的转场动画 就是 第一个界面到另一个界面 第一个界面的退场和第二个界面的进场效果 首先 我这里 创建了两个页面文件 Index.ets和AppView.ets index组件 编写代码如下 import router from "ohos.router" Entry Component struct Index {b…

视频监控需求记录

记录一下最近要做的需求&#xff0c;我个人任务还是稍微比较复杂的 需求&#xff1a;需要实现一个视频实时监控、视频回放、视频设备管理&#xff0c;以上都是与组织架构有关 大概的界面长这个样子 听着需求好像很简单&#xff0c;但是~我们需要在一个界面上显示两个厂商的视…

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟&#xff0c;引脚&#xff0c;将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…

我们应该了解的⽤户画像

当我们谈⽤户画像时&#xff0c;到底在谈什么 对于互联⽹公司来说&#xff0c;企业的增⻓、内容、活动、产品等⼯作基本上都是围绕着“⽤户”来做的&#xff0c;可以说都是在做“⽤户运营”这个⼯作&#xff0c;⽽⽤户画像是⽤户运营⼯作中⾮常重要的⼀环 ⽤户画像的主要特征是…

Linux命令手册

简介 Multics&#xff08;大而全&#xff09;项目失败&#xff0c;吸取教训启动Unix&#xff08;小而精&#xff09;&#xff0c;Linus Benedict Torvalds受Unix启发开发初始版本Linux内核&#xff0c;Git也由其开发&#xff0c;目的是为了更好的管理Linux内核开发。Unix是商业…

Windows如何部署TortoiseSVN客户端

文章目录 前言1. TortoiseSVN 客户端下载安装2. 创建检出文件夹3. 创建与提交文件4. 公网访问测试 前言 TortoiseSVN是一个开源的版本控制系统&#xff0c;它与Apache Subversion&#xff08;SVN&#xff09;集成在一起&#xff0c;提供了一个用户友好的界面&#xff0c;方便用…

专业130+总分380+哈尔滨工程大学810信号与系统考研经验水声电子信息与通信

今年专业课810信号与系统130&#xff0c;总分380顺利考上哈尔滨工程大学&#xff0c;一年的努力终于换来最后的录取&#xff0c;期中复习有得有失&#xff0c;以下总结一下自己的复习经历&#xff0c;希望对大家有帮助&#xff0c;天道酬勤&#xff0c;加油&#xff01;专业课&…

Java找二叉树的公共祖先

描述&#xff1a; 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节…

[AI]文心一言出圈的同时,NLP处理下的ChatGPT-4.5最新资讯

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

【C语言】编译和链接深度剖析

文章目录 &#x1f4dd;前言&#x1f320; 翻译环境和运行环境&#x1f309;翻译环境 &#x1f320;预处理&#xff08;预编译&#xff09;&#x1f309;编译 &#x1f320;词法分析&#x1f320;语法分析 &#x1f309;语义分析&#x1f320;汇编 &#x1f309; 链接&#x1f…

动态闪图怎么在线合成?仅需三秒在线合成

GIF闪图是一种常见的动态图像格式&#xff0c;它由多个静态图像帧组成&#xff0c;以连续的方式播放&#xff0c;形成动画效果。每个图像帧都可以包含不同的颜色和透明度&#xff0c;因此GIF闪图通常用于展示简单的动画、表情符号或者短视频片段。这种格式在网络上广泛应用&…