Ubuntu - Microsoft SQLCMD - 定位指定的服务器/实例时出错

Ubuntu - Microsoft SQLCMD - 定位指定的服务器/实例时出错

因此,我遇到了无法从 Ubuntu VM 连接到 MS SQL Server 的问题。

情况:

  • 一台 Windows Server 具有多个 MS SQL 实例
  • 两个 Ubuntu 20.04 LTS 虚拟机

两个 Ubuntu VM 之一完全能够使用以下命令连接到 SQL 服务器:

sqlcmd -S sqserver.example.com\\instance1 -U sql.serviceaccount -P 'mypassword'

但在另一台服务器上(在设置、相同的网络、ubuntu版本等方面非常相似)我收到以下错误

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. .
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : 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..

于是,我开始对VM2进行故障排除:

  • 我可以 ping sqserver.example.com
  • 使用nc我可以连接到 SQL 实例的开放端口(例如端口 56042)
  • 删除了所有防火墙规则并允许使用 iptables 的所有流量`
  • 重新启动虚拟机
  • 检查IP配置(就像VM1一样,它可以正常工作,只是IP地址高一个,172.16.1.12而不是172.16.1.11)。
  • 检查两端的 ARP 表,确保没有任何奇怪的地方(没有重复的 IP 或其他东西)

在 SQL 端:

  • 仔细检查 SQL 浏览器服务是否正在运行(并重新启动它)
  • 重新启动 SQL 实例`
  • 检查是否有 Windows 防火墙(没有启用)。

完成所有操作后,我放弃并在 VM2 上重新安装了 Ubuntu。默认服务器安装,没什么特别的。安装了微软SQL工具与以前相同的方式(以及在 VM01 上)。

当然,我有点希望它能起作用,但令我惊讶的是,我得到了以下结果:

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : MAX_PROVS: Error Locating Server/Instance Specified [xFFFFFFFF]. .
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : 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..
r

完全相同的错误。

除此之外,我可以 ping SQL 服务器,我还可以使用curlVM02 从该计算机上的网络服务器下载文件。

我有点别无选择。 SQL 服务器可由另一台 Linux 计算机和多台 Windows 计算机访问。


更新:

使用这个一段Python脚本我发现我没有从 SQL 浏览器服务得到答案。

在 VM1 上我得到以下响应:

Instance 172.16.1.123\instance1 is listening on port 56044.

在 VM2 上我得到以下响应:

No response from the SQL Browser service. Verify that the service is available on 172.16.1.123 and \instance1 is a valid instance name on it.

当然,两者都使用相同的脚本运行。


更新:

所以我可以使用连接到特定实例

sqlcmd -S tcp:sqlserver.example.com,56040 -U sqlaccount

所以这项工作,仍然很奇怪,但我暂时就拿它来说吧。

相关内容