我在 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
://learn.microsoft.com/en-us/sql/linux 进程:8009 ExecStart=/opt/mssql/bin/sqlservr(code=exited,status=255)
主 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 -9
onsqlservr
。有一次我再次启动该服务,我是通过直接执行/opt/mssql/bin/sqlservr 并且在我工作时这样做的root
(因此进程本身由 拥有root
)。sqlservr
运行as没有立即出现错误或奇怪的行为root
,但是当 VM 重新启动并且 SQL Server 尝试正确启动(即以mssql
用户身份运行)时,即它在一开始就卡住了。我发现按原样运行的直接后果
sqlservr
是root
/ var/opt/mssql/log/errorlog文件(以及在 SQL Server 启动时创建的其他一些文件)归root
(有道理)所有。并且,这些文件所拥有的直接后果
root
是,当进程正确启动(如mssql
)时,mssql
用户无权将文件重命名为以.1结尾(以及其他任何需要发生的文件,例如默认跟踪等)。但是,它不会出现权限错误,而是永远挂起。主要的解决方法是简单地运行以下内容
root
(我没有尝试将其运行为mssql
)。对于以下两个命令,仅在当前不作为sudo
时才需要,root
因为它会在提示输入密码后运行其后的命令(或其他用户,如果您指定)。root
-u username
root
次要修复(以确保不再发生这种情况)是正确启动 SQL Server ;-):
要获得正确的烫发并获得智能错误,您至少需要以下内容......
我猜一个文件中的权限是错误的。
尝试这样做:
请也检查一下。
不要忘记
.system
下的隐藏文件夹/var/opt/mssql/
。https://designprincipia.com/i-broke-mssql-server-on-linux