Linux上的SQL Server在首次启动时挂起,没有错误,并且没有新的/更新的ErrorLog文件


11

我正在Linux(Ubuntu 16.04)上使用SQL Server 2017,候选发布版2(RC2)。

服务器启动时,SQL Server通常也会启动。但是由于某种原因,SQL Server将无法启动。至少我无法使用sqlcmd连接到它。我每次都收到一个ODBC超时(“ Sqlcmd:错误:Microsoft SQL Server的Microsoft ODBC驱动程序13 ”)错误:

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(或重新启动服务)时没有时间戳匹配,该文件中也没有任何新条目。

AND,在/ 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 BST; 36年前
文档:https
://docs.microsoft.com/zh-cn/sql/linux进程:8009 ExecStart = / opt / mssql / bin / sqlservr(代码=已退出,状态= 255)
主PID:8009(代码=退出,状态= 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'.  

Answers:


15

这最终是由于在使用时不小心而造成的root

我一直在研究Linux上的SQLCLR是否可以像在Windows中一样访问app.Config文件(不幸的是,它没有:Linux上的SQL Server 2017如果存在则忽略应用程序配置文件,或者如果不存在,则有时锁定) (t(SQLCLR)),在某些情况下,SQL Server会完全锁定。如果发生这种情况,只有这样,才能阻止它做kill -9sqlservr。有一次,我再次启动服务,是通过直接执行/ opt / mssql / bin / sqlservr来实现的 而当时我的工作方式是root(因此,进程本身归root)。

目前还没有直接的错误或运行产生奇怪的行为sqlservr作为root,但是当虚拟机重新启动和SQL Server试图正常启动(即运行作为mssql用户),即当它被卡在一开始。

我发现,运行的直接后果sqlservrroot是,在/ var /选择/ MSSQL /日志/错误日志文件(和那些在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

1

为了使烫发正确并得到聪明的错误,您至少需要以下几点...

# make sure needed directories exist
sudo mkdir /var/opt/mssql /var/opt/mssql/.system /var/opt/mssql/data /var/opt/mssql/log

# this should be owned by mssql
sudo chown -R  mssql:mssql /var/opt/mssql
sudo chmod 770 /var/opt/mssql

# this should be owned by root
sudo chown -R root:root /opt/mssql
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.