探索SQL Server 2022在Ubuntu 20.04上的安裝、配置、備份與常見問題

来源:https://www.cnblogs.com/anech/archive/2023/10/09/17751787.html
-Advertisement-
Play Games

最近新項目要上線,考慮成本,放棄雲資料庫,選擇自行安裝,資料庫選擇SQL Server 2022,系統選擇Ubuntu 20.04。 //SQL Server 2022文檔地址 https://learn.microsoft.com/zh-cn/sql/sql-server/?view=sql-se ...


最近新項目要上線,考慮成本,放棄雲資料庫,選擇自行安裝,資料庫選擇SQL Server 2022,系統選擇Ubuntu 20.04。

//SQL Server 2022文檔地址

https://learn.microsoft.com/zh-cn/sql/sql-server/?view=sql-server-ver16

SQL Server 2022 安裝

SQL Server 2022先決條件:伺服器記憶體至少需要2 GB 。

1、導入公共存儲庫 GPG 密鑰

$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc

2、註冊 SQL Server Ubuntu 存儲庫

sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"

3、運行以下命令以安裝 SQL Server

sudo apt-get updatesudo apt-get install -y mssql-server

4、等待安裝完成後,運行 mssql-conf setup

按照提示選擇資料庫版本及設置 SA 密碼。其中資料庫版本Evaluation、Developer 和 Express 版為免費版本。

sudo /opt/mssql/bin/mssql-conf setup

註意:SA 賬戶密碼需要最小長度為 8 個字元,包括大寫和小寫字母、十進位數字和/或非字母數字元號。

此時如果正常,那恭喜您!但我嘗試了好幾次,都卡在了這裡,系統提示:error while loading shared libraries: liblber-2.4.so.2

文本

描述已自動生成

網上查了一堆資料,最終找到瞭解決辦法:

下載安裝libldap-2.4-2_2.4.47+dfsg.4-1+eagle_amd64包

wget https://community-packages.deepin.com/deepin/pool/main/o/openldap/libldap-2.4-2_2.4.47%2Bdfsg.4-1%2Beagle_amd64.debsudo dpkg -i libldap-2.4-2_2.4.47+dfsg.4-1+eagle_amd64.deb

再次運行 mssql-conf setup,繼續設置,再次遇到問題,系統提示:error while loading shared libraries: libssl1.1,解決辦法:

下載安裝libssl1.1_1.1.1-1ubuntu2.1~18.04.23_amd64包

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1-1ubuntu2.1~18.04.23_amd64.debsudo dpkg -i libssl1.1_1.1.1-1ubuntu2.1~18.04.23_amd64.deb

最後運行 mssql-conf setup,完成設置,沒再報錯。

5、驗證服務是否正常運行

systemctl status mssql-server --no-pager

文本

描述已自動生成此時SQL Server 已在 Ubuntu 上正常運行。

6、打開 SQL Server TCP 埠(預設值為 1433)

開啟內網遠程訪問,我們使用的是騰訊雲,需要設置安全組,內網放行1433埠。

SQL Server 2022 配置

SQL Server 資料庫安裝完成後,還需要進行一些常規配置。

1、啟用 SQL Server 代理

為了進行日常數據備份等任務,我們需要開啟代理:

sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
//重啟服務生效
sudo systemctl restart mssql-server

2、更改預設數據或日誌目錄位置

使用 filelocation.defaultdatadir 和 filelocation.defaultlogdir 設置可更改創建新資料庫和日誌文件的位置。預設路徑為:/var/opt/mssql/data。可以使用以下步驟進行修改:

//為新的資料庫數據和日誌文件創建目標目錄
sudo mkdir /home/d/mssql/data

//將目錄的所有者和組更改為 mssql 用戶
sudo chown mssql  /home/d/mssql/data
sudo chgrp mssql  /home/d/mssql/data

//使用 mssql-conf 通過 set 命令更改預設數據目錄
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /home/d/mssql/data

//使用 mssql-conf 通過 set 命令更改預設日誌文件目錄
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /home/d/mssql/data

//重啟服務生效
sudo systemctl restart mssql-server

3、更改生成備份文件的預設位置

使用 filelocation.defaultbackupdir 設置可更改生成備份文件位置。預設路徑為:/var/opt/mssql/data。可以使用以下步驟進行修改:

//為新的備份文件創建目標目錄
sudo mkdir /home/d/mssql/bak/ -p

//將目錄的所有者和組更改為 mssql 用戶
sudo chown mssql /home/d/mssql/backup
sudo chgrp mssql /home/d/mssql/backup

//使用 mssql-conf 通過 set 命令更改預設備份目錄
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultbackupdir /home/d/mssql/backup

//重啟 SQL Server 服務
sudo systemctl restart mssql-server

更多配置請查看文檔:

https://learn.microsoft.com/zh-cn/sql/linux/sql-server-linux-configure-mssql-conf?view=sql-server-ver16

4、設置資料庫自動備份

備份是保護數據的唯一方法,為了防止數據丟失和保障業務的持續性,需要對數據進行備份。這裡採用的方案是按周進行完整備份,按天進行差異備份,按小時進行事務備份,在還原數據時,只需要選擇完全備份、差異備份集和事務備份,打上勾後進行還原即可。

完整備份是指備份整個資料庫,包括表、索引、視圖和存儲過程等所有資料庫對象,完整備份所需時間較長,占用空間也最多,但恢複數據時只需還原單個文件,因此最為簡單和快速。

差異備份是針對上一次完全備份來說的,它只備份自上次完全備份之後發生更改的數據。因此,差異備份比完全備份小,還原也比完全備份快且對性能影響最小。

事務日誌備份是指備份資料庫的事務日誌,它包含了自上次事務日誌備份以來發生的所有事務。它需要依賴於一個完整備份和一個或多個差異或事務日誌備份,還原時需要按照順序還原所有相關的備份。因此,事務日誌備份的優點是占用空間最小,備份時間最短,可以恢復到任何點的時間,甚至可以恢復到故障發生時的狀態(尾部日誌備份)。缺點是還原速度最慢,需要多個步驟和文件,如果中間有一個文件丟失或損壞,就無法完成還原。

我使用 SQL Server 代理中提供的作業來執行計劃,新建三個作業,一個執行完整備份任務,一個執行差異備份任務,還有一個執行事務備份任務。如下圖所示

文本

中度可信度描述已自動生成

首先、設置作業的步驟,我們可以在步驟中添加執行備份任務的腳本。

圖形用戶界面, 文本, 應用程式, 電子郵件

描述已自動生成

然後、設置作業計劃,指定腳本執行的時間周期及間隔。

圖形用戶界面, 應用程式

描述已自動生成

這樣就可以了,以上為演示截圖。

SQL Server 完整備份腳本:

-- 聲明一個變數,獲取當前時間
DECLARE @Dt DATETIME2(7) = GETDATE();​
-- 聲明一個變數,設置資料庫名
DECLARE @Name VARCHAR(20) = 'test';
-- 聲明一個變數,存儲備份文件的路徑,並使用112格式代碼轉換日期
DECLARE @Path VARCHAR(100) = CONCAT('/home/d/mssql/backup/',@Name,'_',CONVERT(VARCHAR(8),@Dt ,112),'_full.bak');
-- 聲明一個變數,存儲完整備份集的名稱
DECLARE @FullName VARCHAR(20) = CONCAT(@Name,'_full');​
-- 創建一個新的備份文件,並寫入完整備份
BACKUP DATABASE @Name
  TO DISK = @Path
  WITH FORMAT, -- 創建新的介質集並清除所有現有備份集
    NAME = @FullName, -- 指定完整備份集的名稱
    DESCRIPTION = 'Full backup', -- 指定介質集的描述
    COMPRESSION, -- 啟用數據壓縮
    CHECKSUM; -- 啟用校驗和檢測
GO

SQL Server 差異備份腳本:

-- 聲明一個變數,獲取當前時間
DECLARE @Dt DATETIME2(7) = GETDATE();​
-- 聲明一個變數,設置資料庫名
DECLARE @Name VARCHAR(20) = 'test';
-- 聲明一個變數,存儲備份文件的路徑,並使用112格式代碼轉換日期
DECLARE @Path VARCHAR(100) = CONCAT('/home/d/mssql/backup/',@Name,'_',CONVERT(VARCHAR(8),@Dt ,112),'_diff.bak');
-- 聲明一個變數,存儲差異備份集的名稱
DECLARE @DiffName VARCHAR(20) = CONCAT(@Name,'_diff');
-- 寫入差異備份,並覆蓋現有的備份文件
BACKUP DATABASE @Name
  TO DISK = @Path
  WITH 
    --INIT, -- 覆蓋現有的備份文件
    DIFFERENTIAL, -- 指定差異備份
    NAME = @DiffName, -- 指定差異備份集的名稱
    DESCRIPTION = 'Differential backup', -- 指定介質集的描述
    COMPRESSION, -- 啟用數據壓縮
    CHECKSUM; -- 啟用校驗和檢測
GO

SQL Server 事務日誌備份腳本:

-- 聲明一個變數,獲取當前時間
DECLARE @Dt DATETIME2(7) = GETDATE();​
-- 聲明一個變數,設置資料庫文件名
DECLARE @Name VARCHAR(20) = 'test';
-- 聲明一個變數,存儲所需的日期
DECLARE @Date DATE;
-- 使用DATEFROMPARTS函數獲取指定日期的零點時間
SET @Date = DATEFROMPARTS(YEAR(@Dt), MONTH(@Dt), DAY(@Dt));
-- 使用DATEPART函數獲取當前時間的小時數
DECLARE @Hour INT = DATEPART(HOUR, @Dt);
-- 使用IIF函數根據當前時間是否小於5點來返回昨天或今天的日期
SET @Date = IIF(@Hour < 5, DATEADD(DAY, -1, @Date), @Date);
-- 聲明一個變數,存儲備份文件的路徑,並使用112格式代碼轉換日期
DECLARE @Path VARCHAR(100) = CONCAT('/home/d/mssql/backup/',@Name,'_',CONVERT(VARCHAR(8),@Date ,112),'_log.bak');

-- 聲明一個變數,存儲事務日誌備份集的名稱
DECLARE @LogName VARCHAR(20) = CONCAT(@Name,'_log');
-- 寫入事務日誌備份,並覆蓋現有的備份文件
BACKUP LOG @Name
  TO DISK = @Path
  WITH
    --INIT, -- 覆蓋現有的備份文件
    NAME = @LogName, -- 指定事務日誌備份集的名稱
    DESCRIPTION = 'Transaction log backup', -- 指定介質集的描述
    COMPRESSION, -- 啟用數據壓縮
    CHECKSUM; -- 啟用校驗和檢測
GO

為了防止磁碟空間不足,我們需要定期清理備份文件,這裡我們使用sh腳本來執行刪除30天以前的文件:

sudo vim /home/d/mssql/backup/bakup_clear.sh

#!/bin/bash
find /home/d/mssql/backup -mtime +30 -name "*.bak" -exec rm -rf {} \

#在/home/ubuntu/backup目錄下,找到所有修改時間超過30天且文件名以.bak結尾的文件或目錄,並刪除它們,解釋一下:

#find /home/ubuntu/backup:這是find命令的基本用法,它會在指定的目錄(/home/ubuntu/backup)下查找文件或目錄。
#-mtime +30:這是find命令的一個選項,它會匹配那些修改時間(mtime)超過30天(+30)的文件或目錄。
#-name "*.bak":這是find命令的另一個選項,它會匹配那些文件名(name)符合指定的模式(*.bak)的文件或目錄。
#-exec rm -rf {} \;:這是find命令的最後一個選項,它會對每個匹配的文件或目錄執行指定的命令(rm -rf {}),其中{}表示匹配的文件或目錄的名稱,;表示命令的結束。

#授執行許可權
sudo chmod 755 /home/d/mssql/backup/bakup_clear.sh

#設置定時任務
#打開配置文件 
sudo crontab -e
#輸入以下內容
0 1 * * * /bin/sh /home/d/mssql/backup/bakup_clear.sh

#編輯創建一個定時服務
sudo crontab -e      
#查看當前用戶的定時任務
sudo crontab -l  

//參考文檔:

https://learn.microsoft.com/zh-cn/sql/relational-databases/integrated-acceleration/use-integrated-acceleration-and-offloading?view=sql-server-ver15
//使用預設MS_XPRESS壓縮選項WITH COMPRESSION (ALGORITHM = MS_XPRESS);

SQL Server 資料庫的備份和還原文檔:

https://learn.microsoft.com/zh-cn/sql/relational-databases/backup-restore/back-up-and-restore-of-sql-server-databases?view=sql-server-ver16

Linux 上的 SQL Server 的性能最佳做法和配置指南:

https://learn.microsoft.com/zh-cn/sql/linux/sql-server-linux-performance-best-practices?view=sql-server-linux-ver16


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、功能介紹 海量數據操作ORM性能瓶頸在實體轉換上面,並且不能使用常規的Sql去實現 當列越多轉換越慢,SqlSugar將轉換性能做到極致,並且採用資料庫最佳API 操作資料庫達到極限性能,當然你如果不用sqlsugar瞭解一下原理也可以使用其他ORM實現 BulkCopy BulkCopy是一種 ...
  • windows中好用的工具和瀏覽器插件 一、geek卸載軟體 軟體介紹 geek一款非常簡潔的卸載軟體,並且非常強大,強大到可以清理註冊表,用過的都說好。 下載地址: https://geekuninstaller.com 主要優點(官網中更詳細) 個人版免費 體積小,還相容win7和xp系統 能夠 ...
  • 【學習課程】:【【小白入門 通俗易懂】2021韓順平 一周學會Linux】 https://www.bilibili.com/video/BV1Sv411r7vd/?p=14&share_source=copy_web&vd_source=2c07d62293f5003c919b2df9b2e054 ...
  • ChatGPT4.0國內站點: https://www.weijiwangluo.com/talk 要查看nginx進程,可以使用以下命令: ps -ef | grep nginx 這個命令會列出當前系統中所有的進程,並通過管道符號|將它們傳遞給grep命令進行過濾,只顯示包含nginx關鍵字的進程 ...
  • PG
    PostgreSQL 教程 ​ — — — — —— 參考: 菜鳥教程 ORDBMS 術語 在我們開始學習 PostgreSQL 資料庫前,讓我們先瞭解下 ORDBMS 的一些術語: 資料庫: 資料庫是一些關聯表的集合。 數據表: 表是數據的矩陣。在一個資料庫中的表看起來像一個簡單的電子錶格。 列: ...
  • awr_plan_change.sql腳本是Kerry Osborne的一個腳本,這個腳本也是我非常喜歡並且經常使用的一個腳本。腳本如下所示 set lines 155col execs for 999,999,999col avg_etime for 999,999.999col avg_lio  ...
  • 在現代社會,手機號已經成為人們生活和工作中不可缺少的一部分。而一個手機號可以初步反映出該號碼的歸屬地信息。因此,查詢手機號所屬地已經成為人們日常生活中的常見需求。本篇文章將通過介紹一個支持多種查詢方式的API介面來幫助讀者更好地瞭解查詢手機號所屬地的相關知識。 首先,我們需要瞭解該API介面的數據源 ...
  • MapReduce服務為用戶提供海量數據的管理及分析功能,快速從結構化和非結構化的海量數據中挖掘您所需要的價值數據。集群中的FusionInsight Manager將提供企業級的集群的統一管理平臺。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...