天天看點

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

作者:opendotnet

最近新項目要上線,考慮成本,放棄雲資料庫,選擇自行安裝,資料庫選擇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 update              sudo 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

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

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

下載下傳安裝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.deb              sudo 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.deb              sudo 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 2022在Ubuntu 20.04上的安裝、配置、備份與常見問題

此時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 2022在Ubuntu 20.04上的安裝、配置、備份與常見問題

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

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

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

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

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

SQL Server 完整備份腳本:

DECLARE @Path NVARCHAR(50) = '/home/d/mssql/bak/test_';              SET @Path= CONCAT(@Path,CONVERT(NVARCHAR(10),GETDATE() ,120),'.bak');                      BACKUP DATABASE test              TO DISK = @Path              WITH FORMAT;               GO           

這段腳本的功能是将名為 test 的資料庫備份到指定路徑下的檔案,備份檔案的路徑是 /home/d/mssql/bak/test_YYYYMMDD.bak,其中 YYYYMMDD 是目前日期的形式。執行備份時,會覆寫原有備份檔案,重新備份。

SQL Server 差異備份腳本:

DECLARE @Path NVARCHAR(50) = '/home/d/mssql/bak/test_';              SET @Path= CONCAT(@Path,CONVERT(NVARCHAR(10),GETDATE() ,120),'.bak');                  BACKUP DATABASE test              TO DISK = @Path              WITH DIFFERENTIAL;               GO           

這段代碼的功能是在 test 資料庫上一次完整備份的基礎上,進行差異備份,通過 TO DISK = @Path 指定完整備份路徑。執行備份時,SQL Server 會把差異備份的檔案追加到有備份檔案中。

在腳本中使用 EXPIREDATE 指令可以設定備份的過期日期,當備份檔案超出指定的備份的過期日期時,SQL Server 将清除備份集中滿足日期束縛的備份作業。例如:

DECLARE @Path NVARCHAR(50) = '/home/d/mssql/bak/test_';              SET @Path= CONCAT(@Path,CONVERT(NVARCHAR(10),GETDATE() ,120),'.bak');                  DECLARE @ExpiryTime DATETIME2(7)=DATEADD(mm, 1, GETDATE());                  BACKUP DATABASE test              TO DISK = @Path              WITH EXPIREDATE =@ExpiryTime;              GO           

同時在腳本中使用 COMPRESSION 指令可設定備份檔案自動壓縮,還可以指定壓縮的算法。例如:

//參考文檔:              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           

文章出自猿惑豁微信公衆号