最近新項目要上線,考慮成本,放棄雲資料庫,選擇自行安裝,資料庫選擇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
網上查了一堆資料,最終找到了解決辦法:
下載下傳安裝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 已在 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 @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
文章出自猿惑豁微信公衆号