适用于:Linux 上的 SQL Server
本文介绍如何对 Linux 上或 Linux 容器中运行的 SQL Server 进行故障排除。
在 Linux 上排查 SQL Server 时,请参见:
排查连接失败问题
如果在连接到 Linux SQL Server 时存在问题,可以检查以下几点。
如果无法使用
localhost进行本地连接,请尝试改用 IP 地址 127.0.0.1。localhost可能未正确映射到此地址。验证是否可从客户端计算机访问服务器名称或 IP 地址。
若要查找 Ubuntu 计算机的 IP 地址,可运行
ifconfig命令,如以下示例所示:sudo ifconfig eth0 | grep 'inet addr'对于 Red Hat,可使用
ip addr命令,如以下示例所示:sudo 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 服务
以下部分介绍了如何管理 SQL Server Linux 容器的执行。 若要管理 Linux 的服务,请参阅在 Linux 上启动、停止和重启 SQL Server 服务。
管理 SQL Server Linux 容器的执行
你可以通过执行以下命令获取最近创建的 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-<installation_timestamp>。
你可以 errorlog 用任何兼容 UTF-16 的工具(如 vim 或 cat )浏览这些文件,具体如下:
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 核心转储(.tar.gz2 扩展名)或 SQL 小型转储(.mdmp 扩展名)。
例如,若要查看核心转储,请执行以下操作:
sudo ls /var/opt/mssql/log | grep '\.tar\.gz2$'
对于 SQL 微型转储,请使用以下脚本:
sudo ls /var/opt/mssql/log | grep '\.mdmp$'
以最小配置或单用户模式启动 SQL Server
在最低配置模式下启动 SQL Server
如果某个配置值的设置(例如,过度分配内存)阻止服务器启动,则此模式非常有用。
sudo -u mssql /opt/mssql/bin/sqlservr -f
在单用户模式下启动 SQL Server
有时,可能必须使用启动选项 -m 在单用户模式下启动 SQL Server 的实例。 有关详细信息,请参阅启动参数。 例如,可能要更改服务器配置选项或恢复已损坏的 master 数据库或其他系统数据库。
例如,使用以下脚本启动 SQL Server 的单用户模式:
sudo -u mssql /opt/mssql/bin/sqlservr -m
此脚本在单用户模式下启动SQL Server,限制与sqlcmd客户端的连接(应用程序名称SQLCMD必须大写):
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 数据库引擎
sudo systemctl stop mssql-server使用
sqlservr参数运行force-setup:sudo -u mssql /opt/mssql/bin/sqlservr --force-setup应始终使用
mssql用户启动 Linux 上的 SQL Server,以防止将来的启动问题。看到消息“恢复已完成”后,请按 Ctrl+C。 这将关闭 SQL Server。
重新配置
sa密码。sudo /opt/mssql/bin/mssql-conf set-sa-password注意
密码应遵循 SQL Server 默认密码策略。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 128 个字符。 使用的密码应尽可能长,尽可能复杂。
启动 SQL Server 并重新配置服务器,包括还原或重新附加任何用户数据库。
sudo systemctl start mssql-server
提高性能
影响性能的因素有很多,包括数据库设计、硬件和工作负载需求。 如果要提高性能,请先查看最佳做法文章:
然后,探索一些可用于排查性能问题的工具。
常见问题
无法连接到远程 SQL Server 实例。
参见 “排查连接故障”。
遇到错误消息:
ERROR: Hostname must be 15 characters or less.这是一个已知问题,只要尝试安装 SQL Server 包的计算机名超过 15 个字符就会出现此问题。 除更改计算机名外,目前尚无其他解决方法。 可以通过编辑
/etc/hostname和/etc/hosts、更改主机名、保存每个文件和重新启动计算机,从而执行此操作。必须重置系统管理员 (
sa) 密码,这将暂时停止 SQL Server 服务。如果忘记了
sa密码,或者出于其他原因需要重置密码,请遵循以下步骤。登录到主机终端,运行以下命令并按照提示重置
sa密码:sudo systemctl stop mssql-server sudo /opt/mssql/bin/mssql-conf setup注意
密码应遵循 SQL Server 默认密码策略。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 128 个字符。 使用的密码应尽可能长,尽可能复杂。
登录密码中的特殊字符可能会导致错误或登录失败。
如果在 SQL Server 密码中使用某些字符,则可能需要使用反斜杠对其进行转义,然后再将其用于 Linux 命令行。 例如,如果在终端命令/shell 脚本中使用美元符号 (
$),则必须对其进行转义:不起作用:
sudo sqlcmd -S myserver -U sa -P Test$$是否有效
sudo sqlcmd -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 开发问题的答案
- Microsoft SQL Server 许可条款和许可证信息
- 企业用户支持选项
- 额外的 SQL Server 支持和反馈
参与编辑 SQL 文档
你是否知道你可以自行编辑 SQL 内容? 你如果这样做,不仅可以帮助改进我们的文档,还可以获得页面贡献者的殊荣。
有关详细信息,请参阅 “编辑Microsoft Learn 文档。