将 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,一经查实,立即删除!

相关文章

用bat(DOS命令)实现自动网络配置

bat文件创建方法 先创建为其它文件&#xff08;比如a1.txt&#xff09;&#xff0c;然后修改扩展名为.bat。最终得到a1.bat文件 “根据用户需要切换网络配置”的工具 下面代码根据需求自行修改 echo off rem 强制获取管理员权限 %1 mshta vbscript:CreateObject("Shell…

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…

torch模型保存

torch模型保存与加载 torch保存与记载核心就两个方法&#xff0c;两个方式&#xff1a; torch.save() - 作用是将对象保存到序列化文件中。 方式一&#xff1a;保存模型 - torch.save(model, ‘./model.pth’) 或者保存一个Python对象- torch.save({‘save’:‘ddd’}, ‘./adi…

PRC教程 1.服务端与消息编码

1.从实现服务端开始 服务端中肯定会有进行监听的。这里先创建一个空的结构体Server。 其Accept方法是进行监听&#xff0c;并与客户端进行连接后, 开启新协程异步去处理ServeConn。 //server.go文件 type Server struct{}func NewServer() *Server {return &Server{} }v…

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

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

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

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

数据备份与恢复

备份概述 一、备份方式 按照数据库服务状态分为&#xff1a; 冷备份&#xff1a;在备份时暂停数据库运行和服务&#xff0c;将整个数据库复制到备份设备中 热备份&#xff1a;在备份时不停止数据库的运行和服务 按照备份的数据分为&#xff1a; 物理备份&#xff1a;备份…

C#设计模式教程(6):原型模式(Prototype Pattern)

原型模式的定义 原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而不是通过实例化的方式。在C#中,这通常是通过实现ICloneable接口来完成的,该接口要求实现一个Clone方法,用于复制对象。 大白话理解原型模式 想象一下古…

如何应用数据图表了解家里的 Unifi 网络状况?

1. 前言 自从之前写了《【让 IT 更简单】使用 Ubiquiti 全家桶对朋友家进行网络改造》 《【Rethinking IT】如何结合 Unifi 和 MikroTik 设备打造家庭网络》两篇文章后&#xff0c;相信给各位正在用 Unifi 或者打算使用 Unifi 的朋友应该有所帮助。 那么&#xff0c;今天我就…

Spring5深入浅出篇:Spring工厂简单原理以及日志应用

Spring5深入浅出篇:Spring工厂简单原理以及日志应用 Spring⼯⼚的底层实现原理(简易版) 还是通过分析第一个Spring程序来展开说说Spring工厂的简单原理 首先创建实体类 package com.baizhiedu.basic;import java.util.List; import java.util.Map; import java.util.Properti…

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

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

Spring 注解 @Transactiona

Transactional 是什么 Transactional 是一个用于声明事务性操作的注解&#xff0c;通常用于 Java 编程语言中的 Spring 框架中。这个注解被用来标记一个方法或类需要被事务管理器事务化的地方。 在 Spring 中&#xff0c;事务是用于管理数据库操作的机制&#xff0c;确保一系…

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

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

leetcode—和为K的子数组

1 和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1…

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…