1. 程式人生 > >SQL Server On Linux:基於實際專案案例,總結功能支援情況及相關問題解決方案,講如何快速完成遷移

SQL Server On Linux:基於實際專案案例,總結功能支援情況及相關問題解決方案,講如何快速完成遷移

  上個月,有個朋友問我說Sql Sever向Mysql遷移有什麼好的經驗分享,他們公司客戶明確提出不再提供Windows伺服器,現在計劃Mysql遷移。我說Mysql遷移成本太高了,不妨可以瞭解一下SQL Server On Linux再做決定。於是,我把之前給運維分享的Word文件發給了他,告訴他,如果可以接受一些不支援的功能,選擇成本,風險小的,如果專案中用到的技術知識剛好避開了那些不支援的功能,3~5個小時可以完成一個專案的遷移。我們公司也有案例,在Linux平臺上,同時安裝了Sqlserver2017和Mysql,舊功能升級Sql Server,新功能用Mysql。

  上週他很高興的告訴我,他們公司最終選擇了SQL Server On Linux,已經完成了一個大專案的升級了,目前使用穩定,專案在正常執行中,他說他今年升職加薪有戲了。後來瞭解到,他們選擇Mysql遷移,是因為他們不知道Sqlserver2017及以上版本也是支援Linxu平臺的,於是強烈建議我把內容分享到部落格園,讓一些人少走一些彎路。

 

背景

  在過去的20多年中,微軟的各大產品靠Windows繫結市場,眾多的微軟ISV圍繞著Windows開發系列產品,形成一個以Windows為核心的生態系統。隨著網際網路的發展,出現了Google,Facebook,Tencent,Baidu,Alibaba 都是以Linux 作業系統構建的產品生態系統,他們不再是具體的產品,而是提供服務,而且服務所用技術都是開源的,和原來Windows的生態不是同一個維度的世界,微軟封閉的生態系統只有慢慢的瓦解。微軟也意識到問題的嚴重性,換了那個稱Linux為毒瘤的CEO史蒂夫·鮑爾默,用領導微軟雲的薩提亞·納德拉來帶領微軟走出原來封閉的生態系統,走入開放的雲生態系統。

  a)     雲端計算機會比 Windows 大,Windows佔微軟的營收越來越少。

  b)     伺服器版作業系統市場份額基本是Linux穩佔第一把交椅,微軟要讓自家的資料庫市場份額擴大來擠佔其他資料庫的份額,必然要做出SQL Server on Linux的決定。

支援的平臺

  SQL Server 在 Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu 上受支援。 此外,它也可作為 Docker 映像提供,可在 Linux 上的 Docker 引擎或用於 Windows/Mac 的 Docker 上執行。

平臺

支援的版本

Red Hat Enterprise Linux

7.3、7.4、7.5、7.6、8

SUSE Linux Enterprise Server

v12 SP2

Ubuntu

16.04、18.04

Docker 引擎

1.8+

  You need to have at least Ubuntu 16.04 or you will face unmet dependencies problems.

系統要求

  SQL Server 對 Linux 具有以下系統要求:

記憶體:

2 GB

檔案系統:

XFS 或 EXT4(其他檔案系統均不受支援,如 BTRFS)

磁碟空間:

6 GB

處理器速度:

2 GHz

處理器核心數:

2 個核心

處理器型別:

僅相容 x64

版本選擇

SQL Server版本

描述

企業

SQL Server Enterprise Edition是高階產品,可提供全面的高階資料中心功能,並具有超快的效能,可為任務關鍵型工作負載提供高服務水平。可用性組支援總副本(一個主副本,八個輔助副本)

標準

SQL Server Standard Edition為部門和小型組織提供了執行其應用程式的基本資料管理,並支援用於內部部署和雲的通用開發工具-以最少的IT資源實現有效的資料庫管理。

網頁

SQL Server Web版是Web託管者和Web VAP的總擁有成本低的選項,可為小型到大型Web屬性提供可伸縮性,可負擔性和可管理性。

開發者

SQL Server Developer版本使開發人員可以在SQL Server之上構建任何型別的應用程式。它包含企業版的所有功能,但已獲許可用作開發和測試系統,而不用作生產伺服器。SQL Server Developer是構建和測試應用程式的人們的理想選擇。

速成版

Express Edition是入門級的免費資料庫,非常適合學習和構建臺式機和小型伺服器資料驅動的應用程式。對於構建客戶端應用程式的獨立軟體供應商,開發人員和愛好者來說,這是最佳選擇。如果需要更高階的資料庫功能,則可以將SQL Server Express無縫升級到SQL Server的其他更高階版本。

Choose an edition of SQL Server:
   1. Evaluation (free, no production use rights, 180-day limit)
   2. Developer (free, no production use rights)
   3. Express (free)
   4. Web (PAID)
   5. Standard (PAID)
   6. Enterprise (PAID)
   7. Enterprise Core (PAID)
   8. I bought a license through a retail sales channel and have a product key to enter.

離線安裝(推薦使用)

  下面安裝以Red Hat為例。

Wget安裝

 yum -y install wget

  已經安裝了就跳過此步。

安裝mssql-server

  如果 Linux 計算機無法訪問聯機儲存庫,則可以直接下載包檔案。 這些包位於 Microsoft 儲存庫中,地址為 https://packages.microsoft.com

  a)   建立目錄下載RPM包

mkdir -p /opt/sqlserver2017 
cd /opt/sqlserver2017/
wget https://packages.microsoft.com/rhel/7/mssql-server-2017/mssql-server-14.0.3048.4-1.x86_64.rpm

       b)   Yum安裝mssql-server

yum localinstall mssql-server-14.0.3048.4-1.x86_64.rpm

  

 配置

/opt/mssql/bin/mssql-conf setup

  執行 mssql-conf setup,按照提示設定 SA 密碼並選擇版本。

  • 請確保為 SA 帳戶指定強密碼(最少 8 個字元,包括大寫和小寫字母、十進位制數字和/或非字母數字符號)。
  • Developer (free, no production use rights)(版本選擇2,Developer)

 驗證服務

systemctl status mssql-server

  

服務啟停

systemctl stop mssql-server
systemctl start mssql-server
systemctl restart mssql-server

安裝 sqlcmd 和 bcp SQL Server 命令列工具

  a)  下載

wget https://packages.microsoft.com/rhel/7.3/prod/msodbcsql-13.1.6.0-1.x86_64.rpm
wget https://packages.microsoft.com/rhel/7.3/prod/mssql-tools-14.0.5.0-1.x86_64.rpm

   b)  安裝

yum localinstall msodbcsql-13.1.6.0-1.x86_64.rpm
yum localinstall mssql-tools-14.0.5.0-1.x86_64.rpm

新增環境變數

  為方便起見,向 PATH 環境變數新增 /opt/mssql-tools/bin/。 這樣可以在不指定完整路徑的情況下執行這些工具。 

  執行以下命令以修改登入會話和互動式/非登入會話的路徑:

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

設定遠端連線,開啟埠

  預設的 SQL Server 埠為 TCP 1433。 如果為防火牆使用的是 FirewallD,則可以使用以下命令:

sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload

  使用 SQL Server 名稱 (-S),使用者名稱 (-U) 和密碼 (-P) 的引數執行 sqlcmd 。 使用者名稱為 SA,密碼是在安裝過程中為 SA 帳戶提供的密碼。

 sqlcmd -S localhost -U SA -P '<YourPassword>'
 sqlcmd -S 192.168.1.XXX -U userName

  接著輸入密碼:

SELECT Name FROM Master..SysDatabases ORDER BY Name
SELECT Name FROM Sys.Databases ORDER BY Name
go

  此時可以用Navicat或者SqlServer2017驗證連線情況。

安裝設定Agent(SQL Server代理)

  SQL Server Agent 也叫SQL Server代理,以前稱為SQL執行者,這是SQL Server的任務日程表。

  這種服務主要是用於在設定的時間備份、複製資料,以及在自動執行排程表上設定的其他專案。啟動這個服務後,設定好在什麼時候做什麼事,這個服務會讓它自動執行,不需要人工干預。

  a)  下載

wget https://packages.microsoft.com/rhel/7/mssql-server-2017/mssql-server-agent-14.0.3015.40-1.x86_64.rpm

  b)  安裝

yum localinstall mssql-server-agent-14.0.3015.40-1.x86_64.rpm

  c)  啟用代理(作業)

  使用 sqlagent.enabled 設定可啟用 SQL Server 代理。 預設情況下,SQL Server 代理處於禁用狀態。 如果 mssql.conf 設定檔案中不存在 sqlagent.enabled,則 SQL Server 在內部假定已禁用 SQL Server 代理。若要更改此設定,請使用以下步驟:

sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo systemctl restart mssql-server

  d)  代理錯誤日誌設定

  sqlpagent.errorlogfile 和 sqlpagent.errorlogginglevel 設定允許你分別設定 SQL 代理日誌檔案路徑和日誌記錄級別。

  sudo /opt/mssql/bin/mssql-conf set sqlagent.errorfile <path>

  SQL 代理日誌記錄級別是位掩碼值,等於:

  1 = 錯誤

  2 = 警告

  4 = 資訊

  如果要捕獲所有級別,請使用 7 作為值。

 sudo /opt/mssql/bin/mssql-conf set sqlagent.errorlogginglevel 7

設定預設語言與排序規則

  a)   若要獲取支援的排序規則的列表,請執行 sys.fn_helpcollations 函式

SELECT NAME FROM SYS.FN_HELPCOLLATIONS()

  b)   如果安裝時沒有指定環境變數引數,會按預設設定安裝,字符集會是拉丁字符集,預設語言是英語,此時中國使用者需要進行另外設定。

systemctl stop mssql-server
/opt/mssql/bin/mssql-conf set-collation
Chinese_PRC_CI_AS

  c)   可以通過預先設定環境變數來按照指定的字符集及本地語言等設定引數,這樣的話無需安裝後再進行配置。

MSSQL_LCID='2052' MSSQL_COLLATION='Chinese_PRC_CI_AS'
/opt/mssql/bin/mssql-conf setup

  d)   查詢當前排序規則

select serverproperty('Collation')

設定記憶體限制

  使用 memory.memorylimitmb 設定可控制 SQL Server 可用的實體記憶體量(以 MB 為單位)。 預設值為實體記憶體的80%。(我們根據情況而定,更改此設定時,不要將此值設定得太高。 如果不留出足夠的記憶體,則可能會遇到 Linux 作業系統和其他 Linux 應用程式的問題)

  a)   使用 memory.memorylimitmb 的 set 命令以根使用者身份執行 mssql-conf 指令碼 。 以下示例將 SQL Server 可用的記憶體更改為 3.25 GB (3328 MB)。

sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 6656

  b)   重啟 SQL Server 服務以應用更改

sudo systemctl restart mssql-server

更改TCP埠

  使用 network.tcpport 設定可更改 SQL Server 偵聽連線的 TCP 埠。 預設情況下,此埠設定為 1433。 若要更改埠,請執行以下命令:

  a)  使用“network.tcpport”的“set”命令以根使用者身份執行mssql-conf 指令碼

sudo /opt/mssql/bin/mssql-conf set network.tcpport <new_tcp_port>

  b)  重啟 SQL Server 服務

sudo systemctl restart mssql-server

  c)  連線到 SQL Server 後,必須在主機名或 IP 地址後用逗號 (,) 指定自定義埠。 

  例如,要使用 SQLCMD 進行連線:

  sqlcmd -S localhost,<new_tcp_port> -U test -P test

# iptables -A INPUT -p tcp --dport 1433 -j ACCEPT
# iptables-save > /etc/sysconfig/iptables
# firewall-cmd --add-port=1433/tcp --permanent
# firewall-cmd --reload

更改預設資料或日誌目錄位置

  使用 filelocation.defaultdatadir 和 filelocation.defaultlogdir 設定可更改建立新資料庫和日誌檔案的位置 。 預設情況下,此位置為 /var/opt/mssql/data。 若要更改這些設定,請使用以下步驟:

  a)   為新的資料庫資料和日誌檔案建立目標目錄。 以下示例建立一個新的/mssql/data目錄

mkdir -p /mssql/data

  b)   將目錄的所有者和組更改為 mssql 使用者

  資料目錄的上一級目錄必須設定mssql使用者才會有許可權!!!!(與Mysql的不同)

sudo chown mssql /mssql
sudo chgrp mssql /mssql
sudo chown mssql /mssql/data
sudo chgrp mssql /mssql/data

  c)   使用 mssql-conf 通過 set 命令更改預設資料目錄

sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /mssql/data

  現在,為新資料庫建立的所有資料庫檔案都將儲存在此新位置。 

  d)   更改新資料庫的日誌檔案 (.ldf) 位置,可以使用下面的“set”命令

mkdir -p /mssql/mssqllog
sudo chown mssql /mssql/mssqllog
sudo chgrp mssql /mssql/mssqllog
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultlogdir /mssql/mssqllog  

  e)   重啟 SQL Server 服務

sudo systemctl restart mssql-server

更改預設轉儲目錄位置

  使用 filelocation.defaultdumpdir 設定可更改每當系統崩潰時生成記憶體和 SQL 轉儲的預設位置。 預設情況下,這些檔案在 /var/opt/mssql/log 中生成。

  若要設定新位置,請使用以下命令:

  a)   新的轉儲檔案建立目標目錄。 以下示例建立一個新的 /mssql/mssqldump 目錄

sudo mkdir /mssql/mssqldump

  b)   將目錄的所有者和組更改為 mssql 使用者

sudo chown mssql /mssql/mssqldump
sudo chgrp mssql /mssql/mssqldump

  c)   使用 mssql-conf 通過 set 命令更改預設資料目錄

sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdumpdir /mssql/mssqldump

  d)   重啟 SQL Server 服務

sudo systemctl restart mssql-server

啟用可用性組(預設不用開啟)

  使用 hadr.hadrenabled 選項可在 SQL Server 例項上啟用可用性組。 下面的命令通過將 hadr.hadrenabled 設定為 1 來啟用可用性組。 必須重啟 SQL Server,該設定才能生效。

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1
sudo systemctl restart mssql-server

驗證建立庫

  a)   建立建立庫的儲存過程,如有這個儲存過程就不用建立了。

CREATE PROCEDURE [dbo].[PROC_CREATE_DB]
    @DB_NAME  varchar(100),
    @data_path_root varchar(256) = 'D:\DBData\' --'/mssql/data/'
AS
BEGIN
    IF DB_ID (@DB_NAME) IS NOT NULL
    EXECUTE ('DROP DATABASE ' + @DB_NAME)
    
    -- execute the CREATE DATABASE statement 
    EXECUTE ('CREATE DATABASE ' + @DB_NAME + '
    ON 
    ( NAME = '''+ @DB_NAME +''',
        FILENAME = '''+ @data_path_root + @DB_NAME + '.mdf'',
        SIZE = 500,
        MAXSIZE = UNLIMITED,
        FILEGROWTH = 500 )
    LOG ON
    ( NAME = '''+ @DB_NAME +'_log'',
        FILENAME = '''+ @data_path_root + @DB_NAME + '_log.ldf'',
        SIZE = 50MB,
        MAXSIZE = UNLIMITED,
        FILEGROWTH = 50 )'
    )
    EXECUTE ('ALTER DATABASE ' + @DB_NAME  + ' SET RECOVERY SIMPLE')
END 

  b)   執行建立庫的儲存過程,注意路徑

EXEC PROC_CREATE_DB '庫名','/mssql/data/'  --庫名、路徑

查詢當前時間

  如果與當前時間不符,則需要修改系統時間:

clock --set --date="2020-10-19 19:30:39"
clock –hctosys
select GETDATE()

  如果一臺伺服器同時部署了mysql,則修改時間後要去mysql查詢當前時間

select now()

 

建立使用者並分配許可權

  需要SA使用者登入才有許可權設定。

  a)   應用程式和管理人員賬號

  Linux上的SQL Server不支援ADMINISTER BULK OPERATIONS許可權或bulkadmin角色。只有sysadmin可以在Linux上對SQL Server執行批量插入。

  sysadmin讀寫許可權比較高,專門給系統相關程式或管理員使用,不得通過任何人為方式使用。

DECLARE @loginName VARCHAR(50) = '使用者名稱'
DECLARE @loginPassword VARCHAR(50) = '密碼'
IF EXISTS(SELECT 1 FROM sys.syslogins WHERE name = @loginName)
BEGIN
	PRINT '登入名【' + @loginName + '】已存在。'
	RETURN
END

DECLARE @sql VARCHAR(8000)
SET @sql = 'CREATE LOGIN ' + @loginName + ' WITH PASSWORD = ''' + @loginPassword + ''''
EXEC(@sql) 
--分配角色
EXEC sys.sp_addsrvrolemember @rolename = 'sysadmin', @loginame = @loginName

  所以,如果是部署在Windows的話,程式賬戶用bulkadmin、dbcreator。建議不用sysadmin。

EXEC sys.sp_addsrvrolemember @rolename = 'bulkadmin', @loginame = @loginName
EXEC sys.sp_addsrvrolemember @rolename = 'dbcreator', @loginame = @loginName

刪除使用者(不要手賤!)

  a)      在刪除該登入名之前,請更改相應資料庫的所有者。

USE [SLSW_YN]; 
EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false;

  @map: 將別名及其許可權移交給新的資料庫所有者

  找到對應使用者所擁有的資料庫許可權,並轉給其他使用者,如SA使用者。

SELECT 'use ['+A.NAME+']; exec dbo.sp_changedbowner @loginame = N''sa'', @map = false; '
FROM SYS.DATABASES A
INNER JOIN SYS.SYSLOGINS B ON A.OWNER_SID=B.SID
WHERE B.NAME='使用者名稱'

  b)   執行a)產生的所有SQL語句

    c)   殺掉賬號所有執行緒再刪除賬號(不殺的話,禁用以後,原來開啟的程序依然可以執行)

CREATE PROC [dbo].[PROC_mgr_login_process_kill_all]
@loginName VARCHAR(255)
AS
BEGIN
DECLARE @processes TABLE
(
ID INT IDENTITY(1, 1),
spid INT,
ecid INT,
status VARCHAR(50),
loginname VARCHAR(255),
hostname VARCHAR(255),
blk INT,
dbname VARCHAR(255),
cmd VARCHAR(8000),
request_id INT
)

DECLARE @sql VARCHAR(8000)
SET @sql = 'EXEC sp_who ''' + @loginName + ''''

INSERT INTO @processes
(
spid,
ecid,
status,
loginname,
hostname,
blk,
dbname,
cmd,
request_id
)
EXEC(@sql)

DECLARE @iLoop INT
DECLARE @totalCount INT

SELECT @iLoop = 1,
@totalCount = COUNT(*)
FROM @processes

WHILE @iLoop <= @totalCount
BEGIN
DECLARE @spid INT
SELECT @spid = spid FROM @processes WHERE ID = @iLoop

SET @sql = 'KILL ' + CAST(@spid AS VARCHAR(20))
EXEC(@sql)

SET @iLoop += 1
END
EN

 

EXEC MTNOH_AAA_DB.[dbo].[PROC_mgr_login_process_kill_all] '使用者名稱';
EXEC sys.sp_droplogin @loginame = '使用者名稱';

mssql.conf格式配置

  類似mysql的etc/my.cnf

  /var/opt/mssql/mssql.conf檔案提供了每個設定的示例

  cat /var/opt/mssql/mssql.conf

線上安裝

自 CU20 起,SQL Server 2017 開始支援 RHEL 8。 以下用於 SQL Server 2017 的命令指向 RHEL 8 儲存庫。 RHEL 8 未預安裝 SQL Server 所需的 python2。 在開始 SQL Server 的安裝步驟之前,請執行以下命令,並驗證是否選擇了 python2 作為直譯器:

sudo alternatives --config python
# If not configured, install python2 and openssl10 using the following commands:
sudo yum install python2
sudo yum install compat-openssl10
# Configure python2 as the default interpreter using this command:
sudo alternatives --config python

  有關詳細資訊,請參閱以下部落格,瞭解如何安裝 python2 並將其配置為預設直譯器: https://www.redhat.com/en/blog/installing-microsoft-sql-server-red-hat-enterprise-linux-8-beta 。

  如果使用 RHEL 7,請將以下路徑更改為 /rhel/7 而不是 /rhel/8。

安裝mssql-server

  下載SQL Server 2017 Red Hat 儲存庫配置檔案並安裝

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
sudo yum install -y mssql-server

  如果想安裝 SQL Server 2019,必須改為註冊 SQL Server 2019 儲存庫。 使用以下命令安裝 SQL Server 2019:

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
sudo yum install -y mssql-server

配置

/opt/mssql/bin/mssql-conf setup

  執行 mssql-conf setup,按照提示設定 SA 密碼並選擇版本。

安裝 sqlcmd 和 bcp SQL Server 命令列工具

  下載 Microsoft Red Hat 儲存庫配置檔案

sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo

  如果安裝了早期版本的 mssql-tools,請刪除所有舊的 unixODBC包

sudo yum remove unixODBC-utf16 unixODBC-utf16-devel

  使用 unixODBC 開發人員包安裝 mssql-tools

sudo yum install -y mssql-tools unixODBC-devel

 …………

  其他參考離線安裝章節

無人蔘與安裝

#!/bin/bash -e

# Use the following variables to control your install:

# Password for the SA user (required)
MSSQL_SA_PASSWORD='<YourStrong!Passw0rd>'

# Product ID of the version of SQL server you're installing
# Must be evaluation, developer, express, web, standard, enterprise, or your 25 digit product key
# Defaults to developer
MSSQL_PID='evaluation'

# Install SQL Server Agent (recommended)
SQL_ENABLE_AGENT='y'

# Install SQL Server Full Text Search (optional)
# SQL_INSTALL_FULLTEXT='y'

# Create an additional user with sysadmin privileges (optional)
# SQL_INSTALL_USER='<Username>'
# SQL_INSTALL_USER_PASSWORD='<YourStrong!Passw0rd>'

if [ -z $MSSQL_SA_PASSWORD ]
then
  echo Environment variable MSSQL_SA_PASSWORD must be set for unattended install
  exit 1
fi

echo Adding Microsoft repositories...
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo

echo Installing SQL Server...
sudo yum install -y mssql-server

echo Running mssql-conf setup...
sudo MSSQL_SA_PASSWORD=$MSSQL_SA_PASSWORD \
     MSSQL_PID=$MSSQL_PID \
     /opt/mssql/bin/mssql-conf -n setup accept-eula

echo Installing mssql-tools and unixODBC developer...
sudo ACCEPT_EULA=Y yum install -y mssql-tools unixODBC-devel

# Add SQL Server tools to the path by default:
echo Adding SQL Server tools to your path...
echo PATH="$PATH:/opt/mssql-tools/bin" >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

# Optional Enable SQL Server Agent :
if [ ! -z $SQL_ENABLE_AGENT ]
then
  echo Enable SQL Server Agent...
  sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
  sudo systemctl restart mssql-server
fi

# Optional SQL Server Full Text Search installation:
if [ ! -z $SQL_INSTALL_FULLTEXT ]
then
    echo Installing SQL Server Full-Text Search...
    sudo yum install -y mssql-server-fts
fi

# Configure firewall to allow TCP port 1433:
echo Configuring firewall to allow traffic on port 1433...
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload

# Example of setting post-installation configuration options
# Set trace flags 1204 and 1222 for deadlock tracing:
#echo Setting trace flags...
#sudo /opt/mssql/bin/mssql-conf traceflag 1204 1222 on

# Restart SQL Server after making configuration changes:
echo Restarting SQL Server...
sudo systemctl restart mssql-server

# Connect to server and get the version:
counter=1
errstatus=1
while [ $counter -le 5 ] && [ $errstatus = 1 ]
do
  echo Waiting for SQL Server to start...
  sleep 5s
  /opt/mssql-tools/bin/sqlcmd \
    -S localhost \
    -U SA \
    -P $MSSQL_SA_PASSWORD \
    -Q "SELECT @@VERSION" 2>/dev/null
  errstatus=$?
  ((counter++))
done

# Display error if connection failed:
if [ $errstatus = 1 ]
then
  echo Cannot connect to SQL Server, installation aborted
  exit $errstatus
fi

# Optional new user creation:
if [ ! -z $SQL_INSTALL_USER ] && [ ! -z $SQL_INSTALL_USER_PASSWORD ]
then
  echo Creating user $SQL_INSTALL_USER
  /opt/mssql-tools/bin/sqlcmd \
    -S localhost \
    -U SA \
    -P $MSSQL_SA_PASSWORD \
    -Q "CREATE LOGIN [$SQL_INSTALL_USER] WITH PASSWORD=N'$SQL_INSTALL_USER_PASSWORD', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_INSTALL_USER]"
fi

echo Done!

檢查已安裝的 SQL Server 版本

  若要驗證 Linux 上的 SQL Server 的當前版本和版本,請先安裝 SQL Server 命令列工具。

  使用“sqlcmd”執行顯示 SQL Server 版本的 Transact-SQL 命令。

sqlcmd -S localhost -U SA -Q 'select @@VERSION'

select @@VERSION

 

SELECT SERVERPROPERTY('Edition')

解除安裝

  若要刪除 Linux 上的“mssql-server”包,不同平臺命令會不一樣:

平臺

包刪除命令

RHEL

sudo yum remove mssql-server

SLES

sudo zypper remove mssql-server

Ubuntu

sudo apt-get remove mssql-server

  刪除包不會刪除生成的資料庫檔案。 如果希望刪除資料庫檔案,請使用以下命令:

 sudo rm -rf /var/opt/mssql/

更新或升級

  若要將“mssql-server”包更新到最新版本,請根據你的平臺使用以下命令之一:

平臺

包更新命令

RHEL

sudo yum update mssql-server

SLES

sudo zypper update mssql-server

Ubuntu

sudo apt-get update
sudo apt-get install mssql-server

  這些命令將下載最新包,並替換 /opt/mssql/ 下的二進位制檔案。 此操作不會影響到使用者生成的資料庫和系統資料庫。 

  若要升級 SQL Server,請首先將配置的儲存庫更改為所需的 SQL Server 版本。 

  然後使用同一個 update 命令升級 SQL Server 版本。  

  儲存庫的作用:用於獲取資料庫引擎包、mssql-server 以及相關 SQL Server 包 。 

 

  現有五個主要儲存庫:

儲存庫

名稱

說明

2019

mssql-server-2019

SQL Server 2019 累積更新 (CU) 儲存庫。

2019 GDR

mssql-server-2019-gdr

SQL Server 2019 GDR 儲存庫僅用於關鍵更新。

2019 預覽版

mssql-server-preview

SQL Server 2019 預覽版和 RC 儲存庫。

 

2017

mssql-server-2017

SQL Server 2017 累積更新 (CU) 儲存庫。

2017 GDR

mssql-server-2017-gdr

SQL Server 2017 GDR 儲存庫僅用於關鍵更新。

 

回滾

  若要將 SQL Server 回滾或降級到以前的版本,請使用以下步驟:

       a)標識要降級到的 SQL Server 包的版本號。 有關包版本號的列表,請參閱發行說明。

       b)降級到 SQL Server 的早期版本。 在以下命令中,將 <version_number> 替換為步驟 1 中標識的 SQL Server 版本號。

平臺

包更新命令

RHEL

sudo yum downgrade mssql-server-<version_number>.x86_64

SLES

sudo zypper install --oldpackage mssql-server=<version_number>

Ubuntu

sudo apt-get install mssql-server=<version_number> sudo systemctl start mssql-server

  只支援降級到相同主版本(如SQL Server 2017)內的版本。

功能支援情況

  相比Windows,Linux會有些功能不完全支援。

類別

Windows

Linux

說明

 

SQL基礎語法

 

儲存過程

 

函式

包括CLR函式。不支援設定了EXTERNAL_ACCESS或UNSAFE許可權的CLR程式集

索引

 

作業

 

檢視

 

事務

 

資料庫分割槽

 

連結伺服器

只支援SQLServer連結伺服器,不支援Mysql。低版本連線高版本會出現部分問題

系統表

 

備份、還原

 

相關推薦

SQL Server On Linux基於實際專案案例總結功能支援情況相關問題解決方案如何快速完成遷移

  上個月,有個朋友問我說Sql Sever向Mysql遷移有什麼好的經驗分享,他們公司客戶明確提出不再提供Windows伺服器,現在計劃Mysql遷移。我說Mysql遷移成本太高了,不妨可以瞭解一下SQL Server On Linux再做決定。於是,我把之前給運維分享的Word文件發給了他,告訴他,如果可

SQL Server on Linux: How? Introduction: SQL Server Blog

nco adding existing initial planning for rec instance thum SQL Server Blog Official News from Microsoft’s Information Platform h

Microsoft SQL Server on Linux 踩坑指南

stat 自己 blog ext4 cat 宣傳 requires 日誌 主機 微軟用 SQL Server 在 2016 年的時候搞了一個大新聞,宣傳 Microsoft ?? Linux 打得一眾軟粉措手不及。但是這還是好事情,Linux 上也有好用的 SQL Ser

SQL Server On Linux(3)——SQL Server 2019 For Linux 下載並部署示例資料庫

  接上文SQL Server On Linux(2)——SQL Server 2019 For Linux安裝過程細節研究 正所謂工欲善其事必先利其器,讀者可能也跟作者一樣很迫切希望瞭解和嘗試SQL Server On Linux及SQL 2019的各種新特性,不過為了走得

SQL Server On Linux(2)——SQL Server 2019 For Linux安裝過程細節研究

  接上文SQL Server On Linux(1)——CentOS 7 安裝SQL Server2019 在安裝過程中,作者發現了一些資訊,這些資訊引起了作者的興趣,那麼下面作者把自己研究的結果分享出來,如果讀者對此有深入研究過,歡迎指正。 為什麼要研究這些東西?說白了就

SQL Server On Linux(1)——CentOS 7 安裝SQL Server2019

前言 SQL Server 2019已經正式公佈,雖然只是preview版,但是不影響我們追求新的技術。接下來的一個系列,隨著本人的研究,儘量讓這個系列成為“教程”,真正的入門到精通。 環境準備   不廢話,先把研究環境搭建起來。由於某些原因(晚點再說),本系列

SQL Server On Linux(4)——Linux 初步配置(1)

接上文:SQL Server On Linux(3)——SQL Server 2019 For Linux 下載並部署示例資料庫 本文聊一下Linux,因為這個系列是Linux上的SQL Server,所以我們有必要初步瞭解一下這個基石,地基不穩那麼上面搭建的東西也必然搖搖晃

SQL Server On Linux(5)——Linux上新增磁碟

接上文:SQL Server On Linux(4)——Linux 初步配置 隨著資料庫的使用時間越來越久,空間問題越顯突出。這個時候其中一個手段就是加空間。很多時候是通過加磁碟來實現。在很多規範化的企業裡面,有專門的IT人員負責運維伺服器,DBA通常只負責管理資料庫。但是作

SQL Server愛上Linux配置 SQL Server 2017 上的可用性組初體驗

作者 | 張樂奕:Oracle ACE 總監,ACOUG (中國 Oracle 使用者組)聯合發

vue+webpack專案在iOS微信端偶爾出現白屏重新整理又能重新進入的解決方案在Android上不會出現

           問題描述:微信公眾號內部的專案,我使用的是vue+webpack的方式,路徑配置正確的情況下,在Chrome上執行正常,執行npm run build放在測試伺服器上,配置好相應入口,通過微信訪問,在Android機

SQL Server on Red Hat Enterprise Linux

rhel uri 部分 doc fonts tle web per 安裝過程 本文從零開始一步一步介紹如何在Red Hat Enterprise Linux上搭建SQL Server 2017,包括安裝系統、安裝SQL等相關步驟和方法(僅供測試學習之用,基礎篇)。 一.

OLAP on TableStore基於Data Lake Analytics的Serverless SQL大資料分析

開發十年,就只剩下這套架構體系了! >>>   

Microsoft SQL Server for Linux安裝和配置

fig fcm zone linux for onf targe 查看 nbsp 客戶端   雖說mssql for linux早已經出來了,但原本沒有打算這麽早就去嘗試的,無奈之下還是得先嘗試用了,這裏分幾篇介紹我在用mssql for linux時遇到的問題,不得不說作

從Windows遷移SQL ServerLinux

dir 工具 創建目錄 文件目錄 stat 安裝 windows option eight 前一篇博客關於SQL Server on Linux的安裝,地址:http://www.cnblogs.com/fishparadise/p/8057650.html,現在測試把Wi

Shiro入門一基於java專案初識Shiro

在看了兩天的《跟我學Shiro》之後,針對大佬的部落格原始碼來梳理一下對Shiro的簡單理解。 《跟我學Shiro》pdf上傳兩次都失敗了,上傳成功之後再貼出來分享給需要的同學。 首先是shiro-permission.ini檔案的配置: 裡面包含了使用者和許可權 [use

DbForge Query Builder for SQL Server入門教程如何操縱檔案

【dbForge Query Builder for SQL Server下載】 該文描述瞭如何在dbForge Query Builder for SQL Server中操作文件。 管理檔案 在Windows Dialog Box讓你和檔案之間切換進行管理。要開啟它,請從“ Windo

DbForge Query Builder for SQL Server入門教程在Grid Overview中編輯資料

【dbForge Query Builder for SQL Server下載】 當dbForge Query Builder for SQL Server執行任何返回結果集的語句時,檢索到的資料將顯示在同一SQL文件的資料檢視的資料編輯器中。本主題說明如何編輯網格中的資料。 插入,刪除,複

DbForge Query Builder for SQL Server入門教程如何建立和編輯查詢

【dbForge Query Builder for SQL Server下載】 本問將說明如何在dbForge Query Builder for SQL Server中建立和編輯SQL查詢。 要建立查詢: 1. 建立伺服器連線。 2. 在“Standard” 工具欄上,單擊“Ne

DbForge Query Builder for SQL Server入門教程使用計劃圖和連線到資料庫

【dbForge Query Builder for SQL Server下載】 Query Profiler允許您在單個檢視中檢查不同查詢的計劃。為此,請按住CTRL鍵並在查詢分析樹中選擇多個計劃圖。 您可以設定要與最新結果進行比較的計劃數。 下圖顯示選擇了Compare las

DbForge Data Compare for SQL Server入門教程連線到資料庫、快速同步兩個資料庫

在連線到資料庫之前,必須建立伺服器連線。 要建立連線: 1. 在資料庫選單上,單擊新建連線。將開啟“ 資料庫連線屬性” 對話方塊。 2. 在“ 伺服器” 組合框中,單擊“ <瀏覽...>” 。將開啟“ 瀏覽伺服器” 視窗。 3. 在“ 本地伺服器” 選