Sql-Server

Linux 上的 SQL Server 在初始啟動時掛起,沒有錯誤,也沒有新的/更新的 ErrorLog 文件

  • April 5, 2021

我在 Linux (Ubuntu 16.04) 上使用 SQL Server 2017,Release Candidate 2 (RC2)。

當伺服器啟動時,SQL Server 通常也會啟動。但由於某種原因,SQL Server 將不再啟動。至少我無法使用sqlcmd連接到它。我現在每次都收到 ODBC 超時(“Sqlcmd:錯誤:Microsoft ODBC Driver 13 for SQL Server ”)錯誤:

Login timeout expired.  
TCP Provider: Error code 0x2749.  
A network-related or instance-specific error has occurred while establishing a
connection to SQL Server. Server is not found or not accessible. Check if instance
name is correct and if SQL Server is configured to allow remote connections.
For more information see SQL Server Books Online..

但是,當我執行時:

ps aux | grep mssql

我收到兩個返回的條目,表明mssql使用者正在執行該sqlservr程序。

此外,/var/opt/mssql/log/中的****錯誤日誌文件在我啟動 VM(或重新啟動服務)時沒有時間戳匹配,該文件中也沒有任何新條目。

並且,在**/var/log/messages**中,所有顯示的是:

這是一個評估版本。有

$$ 141 $$評估期的剩余天數。

如果我執行systemctl status mssql-server,那麼我會得到以下資訊:

● mssql-server.service - Microsoft SQL Server 數據庫引擎

已載入:已載入(/lib/systemd/system/mssql-server.service;已啟用;供應商預設:已啟用)

活動:自 2017 年星期一以來失敗(結果:退出程式碼)- 09-04 20:01:56 英國夏令時;36 秒前

文件:https

://docs.microsoft.com/en-us/sql/linux 程序:8009 ExecStart=/opt/mssql/bin/sqlservr (code=exited, status=255)

Main PID: 8009 (code=退出,狀態=255)

Started Microsoft SQL Server Database Engine.  
This is an evaluation version.  There are [141] days left in the evaluation period.  
Stopping Microsoft SQL Server Database Engine...  
mssql-server.service: Main process exited, code=exited, status=255/n/a  
Stopped Microsoft SQL Server Database Engine.  
mssql-server.service: Unit entered failed state.  
mssql-server.service: Failed with result 'exit-code'.  

這最終成為在工作時不小心的情況root

我一直在研究 Linux 上的 SQLCLR 是否可以像在 Windows 中一樣訪問 app.Config 文件(遺憾的是,它沒有:Linux 上的 SQL Server 2017 會忽略應用程序配置文件(如果存在),或者有時會鎖定(如果不存在) ’t (SQLCLR) ) 並且在某些情況下 SQL Server 會完全鎖定。發生這種情況時,阻止它的唯一方法是執行kill -9on sqlservr。有一次我再次啟動該服務,我是通過直接執行**/opt/mssql/bin/sqlservr** 並且在我工作時這樣做的root(因此程序本身由 擁有root)。

sqlservr執行as沒有立即出現錯誤或奇怪的行為root,但是當 VM 重新啟動並且 SQL Server 嘗試正確啟動(即以mssql使用者身份執行)時,即它在一開始就卡住了。

我發現按原樣執行的直接後果sqlservrroot/ var/opt/mssql/log/errorlog文件(以及在 SQL Server 啟動時創建的其他一些文件)歸root(有道理)所有。

而且,這些文件所擁有的直接後果root是,當程序正確啟動(如mssql)時,mssql使用者無權將文件重命名為以**.1**結尾(以及其他任何需要發生的事情文件,例如預設跟踪等)。但是,它不會出現權限錯誤,而是永遠掛起。

主要的解決方法是簡單地執行以下內容root(我沒有嘗試將其執行為mssql)。對於以下兩個命令,僅在目前不作為sudo時才需要,root因為它會在提示輸入密碼後執行其後的命令(或其他使用者,如果您指定)。 root``-u username``root

sudo chown -R  mssql:mssql /var/opt/mssql

次要修復(以確保不再發生這種情況)是正確啟動 SQL Server ;-):

sudo systemctl start mssql-server

引用自:https://dba.stackexchange.com/questions/185045