将 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 --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 的对象存储集成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++类相关oj题目分享(计算日期到天数转换、日期差值、打印日期、日期累加)

文章目录 1.计算日期到天数转换题目详情代码思路 2.KY111 日期差值题目详情代码思路 3.KY222 打印日期题目详情代码 4.KY258 日期累加题目详情代码思路 1.计算日期到天数转换 传送门 题目详情 代码 #include <iostream> using namespace std; int GetDay(int year,int…

面试题16.15.珠玑妙算

前言 这两天突然发现力扣上还是有我能写出来的题的&#xff0c;虽说都是简单级别的&#xff08;以及一道中等的题&#xff09;&#xff0c;但是能写出来力扣真的太开心了&#xff0c;&#xff08;大佬把我这段话当个玩笑就行了&#xff09;&#xff0c;于是乎&#xff0c;我觉…

【C语言深度剖析——第三节(关键字3)】《C语言深度解剖》+蛋哥分析+个人理解

本文由睡觉待开机原创&#xff0c;未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 目录 1.基本数据类型2.sizeof关键字 前言&#xff1a; 本期我们继续探讨关于C深度解剖这本书相关内容&#…

创业前先把刘强东这两句琢磨明白!不然大概率失败!2024最适合创业的行业!2024年普通人的创业机会在哪里

第一句&#xff0c;真正解决一个问题。 这句话表达了&#xff0c;你的项目一定是要建立在解决具体的问题上&#xff0c;而不是你觉得自己有个好点子&#xff0c;或者好产品就可以了。因为即使你的产品很好&#xff0c;服务很好&#xff0c;如果不能切实的解决某个问题&#xf…

使用pycharm连接读取orcl数据库的表

背景&#xff1a;工作需要 需求&#xff1a;使用pycharm访问远程oracle类型数据库的表&#xff0c;表中包含lob字段&#xff08;这也是个坑&#xff01;&#xff09; 麻了&#xff0c;搞了一个星期&#xff0c;终于成功了&#xff0c;真可谓是每步都有坑&#xff0c;看的文章也…

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

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

禅道:从安装到使用,一篇文章带你全面了解

博客前言&#xff1a; 在这个充满竞争和快节奏的世界里&#xff0c;项目管理已经成为了许多行业的关键环节。禅道作为一种功能强大、易用的项目管理工具&#xff0c;正在被越来越多的企业和团队所采用。它不仅能帮助我们高效地管理项目&#xff0c;还能提升团队协作和沟通的效…

竞赛保研 大数据房价预测分析与可视

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 大数据房价预测分析与可视 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适合…

2023我的总结:读书、写作、运动、爱家人、学一门手艺

不知不觉中&#xff0c;2024年1月已过去大半了&#xff0c;按照惯例&#xff0c;还是对过去一年的所思所行做个简单的汇报。也希望我的一些经历&#xff0c;能给到正在做年终总结或新年规划的朋友&#xff0c;一些参考。 01 读书&#xff0c;是门槛最低的高贵 最近一段时间&am…

Jmeter对接口测试入参实现MD5加密

一、自带函数助手MD5加密 在函数助手中找到__MD5这个函数&#xff0c;第一个参数是要md5加密的值&#xff0c;第二个参数是保存加密后值的变量 在请求参数中引用该函数 发送请求可以看到密码加密了 二、beanshell脚本md5加密 在jmeter的lib目录下&#xff0c;自带commons-cod…

傲空间私有部署 Linux 指南

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 安装 docker 请下载对应的 Docker&#xff0c;安装完成后启动。Install Docker Engine on Ubu…

基于HFSS的微带线特性阻抗仿真-与基于FDTD的计算电磁学方法对比(Matlab)

基于HFSS的微带线特性阻抗仿真-与基于FDTD的计算电磁学方法对比&#xff08;Matlab&#xff09; 工程下载&#xff1a; HFSS的微带线特性阻抗仿真工程文件&#xff08;注意版本&#xff1a;HFSS2023R2&#xff09;&#xff1a; https://download.csdn.net/download/weixin_445…

定向减免!函数计算让 ETL 数据加工更简单

业内较为常见的高频短时 ETL 数据加工场景&#xff0c;即频率高时延短&#xff0c;一般费用大头均在函数调用次数上&#xff0c;推荐方案一般为攒批处理&#xff0c;高额的计算成本往往令用户感到头疼&#xff0c;函数计算推出定向减免方案&#xff0c;让 ETL数据加工更简单、更…

centos7安装nginx,按图文步骤操作

下载nginx&#xff1a; 官方网站&#xff1a;http://nginx.org/ 我这使用的版本是1.8.0版本。 1.nginx要求的安装环境 1.1、需要安装gcc的环境。 yum install gcc-c 1.2、第三方的开发包。 pcre PCRE(Perl Compatible Regular Expressions)是一个Perl库&#xff0c;包括…

Autosar信息安全入门系列01-SecOC基础介绍

本文框架 1. 概述2. SecOC基本概念2.1 SecOC是什么&#xff1f;2.2 新鲜度值与MAC值2.3 SecOC报文格式 3. SecOC报文发送及接收逻辑3.1 SecOC报文的发送3.2 SecOC报文的接收 1. 概述 本文为Autosar通信入门系列介绍&#xff0c;如您对AutosarMCAL配置&#xff0c;通信&#xf…

ChatGPT提示词保姆级教程

现在越来越多提示词教程&#xff0c;本文列个清单&#xff0c;方便以后整理&#xff0c;不定期更新&#xff0c;欢迎关注留言&#xff01; 后续更新欢迎关注 提示词&#xff08;prompt&#xff09;出来后&#xff0c;被称为一个新的岗位诞生&#xff0c;面向提示词工程师。 …

Mysql 索引 、事务、隔离级别

目录 索引&#xff08;index&#xff09; 1.为什么要有索引&#xff1f; 2.引入索引的代价 3.索引的操作 4.索引的使用场景 5.索引的底层原理 事务 (transaction) 事物的回滚是怎么做到的 事物的四大特性 并发执行事务带来的问题 隔离级别 索引&#xff08;index&…

OpenSource - 工具管理器easy-manager-tool

文章目录 功能说明运行配置环境配置启动docker部署 项目安全UI展示 Easy-Manager-Tool 打造软件行业首款集成工具&#xff0c;不管你是程序员&#xff0c;测试&#xff0c;运维等都可以使用该软件来提升自己的工作效率。 Easy-Manager-Tool 的诞生是为了解决软件行业众多参与者…

在 wsl-ubuntu 里通过 docker 启动 gpu-jupyter

在 wsl-ubuntu 里通过 docker 启动 gpu-jupyter 0. 背景1. 安装 docker-ce2. 安装 NVIDIA Container Toolkit3. 使用 nvidia-ctk 命令配置容器运行4. 通过 docker 运行 nvidia-smi5. 运行 gpu-jupyter6. 访问 gpu-jupyter7. 测试 gpu-jupyter 是否可以访问 cuda 0. 背景 今天突…

了解Vue中日历插件Fullcalendar

实现效果如下图&#xff1a; 月视图 周视图 日视图 官方文档地址&#xff1a;Vue Component - Docs | FullCalendar 1、安装与FullCalendar相关的依赖项 npm install --save fullcalendar/vue fullcalendar/core fullcalendar/daygrid fullcalendar/timegrid fullcalend…