活动
对 Linux 上的 SQL Server 进行故障排除
适用于:SQL Server - Linux
本文介绍如何对 Linux 上或 Linux 容器中运行的 SQL Server 进行故障排除。 在对 Linux 上的 SQL Server 进行故障排除时,请记得查看支持的功能和已知限制:
有关常见问题的解答,请参阅 Linux 上的 SQL Server 常见问题解答。
如果在连接到 Linux SQL Server 时存在问题,可以检查以下几点。
如果无法使用
localhost
进行本地连接,请尝试改用 IP 地址 127.0.0.1。localhost
可能未正确映射到此地址。验证是否可从客户端计算机访问服务器名称或 IP 地址。
若要查找 Ubuntu 计算机的 IP 地址,可运行
ifconfig
命令,如以下示例所示:Bashsudo ifconfig eth0 | grep 'inet addr'
对于 Red Hat,可使用
ip addr
命令,如以下示例所示:Bashsudo ip addr show eth0 | grep "inet"
提示
但如果是 Azure VM,则此方法不适用。 对于 Azure VM,请在 Azure 门户中查找 VM 的公共 IP。
如果适用,请检查是否已在防火墙上打开了 SQL Server 端口(默认为 1433)。
对于 Azure VM,请检查是否有默认 SQL Server 端口的网络安全组规则。
验证用户名和密码是否存在任何拼写错误、多余空格或错误大小写。
尝试以显式方式设置协议和端口号,确保服务器名称如下所示:
tcp:servername,1433
。网络连接问题也可能导致连接错误和超时。 验证连接信息和网络连接后,请再次尝试连接。
以下部分介绍了如何管理 SQL Server Linux 容器的执行。 若要管理 Linux 的服务,请参阅在 Linux 上启动、停止和重启 SQL Server 服务。
通过运行以下命令,可以获得最新创建的 SQL Server Linux 容器的状态和容器 ID(ID 位于 CONTAINER ID
列下):
sudo docker ps -l
可根据需要使用以下命令停止或重启 SQL Server 服务:
sudo docker stop <container ID>
sudo docker restart <container ID>
提示
有关 Linux 容器的更多故障排除提示,请参阅 SQL Server Docker 容器故障排除。
SQL Server 数据库引擎在 Linux 和容器安装的 /var/opt/mssql/log/errorlog
文件中进行记录。 需要启用“超级用户”模式才能浏览此目录。
安装程序在此处记录:/var/opt/mssql/setup-<time stamp representing time of install>
可使用任何 UTF-16 兼容工具(如 vim 或 cat)浏览 errorlog
文件,如下所示:
sudo cat errorlog
如果愿意,还可以使用以下命令将文件转换为 UTF-8,通过“more”或“less”读取它们:
sudo iconv -f UTF-16LE -t UTF-8 <errorlog> -o <output errorlog file>
可通过 SQL 命令查询扩展事件。 有关详细信息,请参阅扩展事件。
在 Linux 中查看日志目录中的转储。 在 /var/opt/mssql/log
目录下查看 Linux Core 转储(扩展名为 .tar.gz2
)或 SQL 小型转储(扩展名为 .mdmp
)。
例如,若要查看核心转储,请执行以下操作:
sudo ls /var/opt/mssql/log | grep .tar.gz2
对于 SQL 转储,请使用此脚本:
sudo ls /var/opt/mssql/log | grep .mdmp
如果配置值的设置(例如,过度提交内存)妨碍服务器启动,则此模式非常有用。
sudo -u mssql /opt/mssql/bin/sqlservr -f
有时,可能必须使用启动选项 -m
在单用户模式下启动 SQL Server 的实例。 有关详细信息,请参阅启动参数。 例如,可能要更改服务器配置选项或恢复已损坏的 master
数据库或其他系统数据库。
例如,使用以下脚本在单用户模式下启动 SQL Server:
sudo -u mssql /opt/mssql/bin/sqlservr -m
此脚本使用 sqlcmd 在单用户模式下启动 SQL Server:
sudo -u mssql /opt/mssql/bin/sqlservr -m sqlcmd
应始终使用 mssql
用户启动 Linux 上的 SQL Server,以防止将来的启动问题。 例如:sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]
如果不小心使用其他用户启动了 SQL Server,则必须先将 SQL Server 数据库文件的所有权更改回 mssql
用户,然后才能使用 systemd 启动 SQL Server。 例如,若要将 /var/opt/mssql
下所有数据库文件的所有权更改为 mssql
用户,请运行以下命令:
chown -R mssql:mssql /var/opt/mssql/
作为最后手段,可以选择将 master
和 model
数据库重新生成为默认版本。
警告
此过程非常危险,因为你可能删除已配置的所有 SQL Server 系统数据,包括有关用户数据库的信息(但不包括用户数据库本身)。
之后需要将用户数据库附加到实例。 还将删除系统数据库中存储的其他信息,包括:
- 数据库主密钥 (DMK) 信息
master
中加载的任何证书- SA 登录名的密码
msdb
中与作业有关的信息msdb
中的数据库邮件信息sp_configure
选项
除非还备份了证书和私钥,否则无法重新附加使用透明数据加密 (TDE) 加密的任何用户数据库。
只有在了解其含义后才能使用这些步骤。
停止 SQL Server 数据库引擎
Bashsudo systemctl stop mssql-server
在使用
force-setup
参数的情况下运行 sqlservrBashsudo -u mssql /opt/mssql/bin/sqlservr --force-setup
应始终使用
mssql
用户启动 Linux 上的 SQL Server,以防止将来的启动问题。看到消息“恢复已完成”后,请按 Ctrl+C。 这将关闭 SQL Server。
重新配置 SA 密码。
Bashsudo /opt/mssql/bin/mssql-conf set-sa-password
启动 SQL Server 并重新配置服务器,包括还原或重新附加任何用户数据库。
Bashsudo systemctl start mssql-server
影响性能的因素有很多,包括数据库设计、硬件和工作负载需求。 如果希望改善性能,请首先查看本文中的最佳做法,适用于 Linux 上的 SQL Server 的性能最佳做法和配置指南。 然后,浏览一些可用于解决性能问题的工具。
无法连接到远程 SQL Server 实例。
请参阅连接到 Linux 上的 SQL Server 文章的疑难解答部分。
遇到错误消息:
ERROR: Hostname must be 15 characters or less.
这是一个已知问题,只要尝试安装 SQL Server 包的计算机名超过 15 个字符就会出现此问题。 除更改计算机名外,目前尚无其他解决方法。 可以通过编辑
/etc/hostname
和/etc/hosts
、更改主机名、保存每个文件和重新启动计算机,从而执行此操作。必须重置系统管理员 (SA) 密码,这将暂时停止 SQL Server 服务。
如果忘记了系统管理员 (SA) 密码,或者出于其他原因需要重置密码,请遵循以下步骤。
登录到主机终端,运行以下命令并按照提示重置 SA 密码:
Bashsudo systemctl stop mssql-server sudo /opt/mssql/bin/mssql-conf setup
登录密码中的特殊字符会导致错误或登录失败。
如果在 SQL Server 登录密码中使用某些字符,则可能需要使用反斜杠对其进行转义,然后再将其用于 Linux 命令行。 例如,如果在终端命令/shell 脚本中使用美元符号 ($),则必须对其进行转义:
不起作用:
Bashsudo sqlcmd -S myserver -U sa -P Test$$
有效:
Bashsqlcmd -S myserver -U sa -P Test\$\$
- SQL 意见:是否有改进 SQL Server 的建议?
- Microsoft Q&A (SQL Server)
- DBA Stack Exchange (tag sql-server):询问 SQL Server 相关问题
- Stack Overflow (tag sql-server):有关 SQL 开发问题的答案
- Reddit:有关 SQL Server 的一般讨论
- Microsoft SQL Server 许可条款和许可证信息
- 企业用户支持选项
- 其他 SQL Server 帮助和反馈
你是否知道你可以自行编辑 SQL 内容? 你如果这样做,不仅可以帮助改进我们的文档,还可以获得页面贡献者的殊荣。
有关详细信息,请参阅如何参与 SQL Server 文档编辑