为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 连接到 SQL Server 错误 - “TLS 握手失败:无法读取握手数据包:

Golang 连接到 SQL Server 错误 - “TLS 握手失败:无法读取握手数据包:

Go
九州编程 2023-07-10 15:01:06
我编写了一个系统,该系统可以自动执行在 Microsoft Azure 上部署 VM 的过程,在其上安装 Sql Server,然后.sql针对新安装的服务器执行脚本以初始化环境。周五,这一切都按预期进行。今天,我收到此错误。我的代码有以下相关导入:import(    "database/sql"    _ "github.com/denisenkom/go-mssqldb")并在安装后使用以下代码实际连接到数据库(为简洁起见,删除了错误处理):// variablesconnectionString := "sqlserver://MasterUser:MasterPassword@xx.xx.xx.xxx:1433"dbName := "mssql"// open database / get metadata sorteddb, err := sql.Open(dbname, connectionString)defer db.Close()//Check to see if the connection is successful. err = db.Ping()                                         // <--------// file inputfileBytes, err := ioutil.ReadFile("../sql/" + dbsql)fileReader := bytes.NewReader(fileBytes)// parse line-by-linescanner := bufio.NewScanner(fileReader)lineNo := 0for scanner.Scan() {    toExec := scanner.Text()    lineNo += 1    _, err = db.Exec(toExec)                           // <--------}该错误发生在两个db.Ping()和每个 上db.Exec()。在这些情况下,关联的消息err是TLS Handshake failed: Cannot read handshake packet: EOF这可能是相关的,但我不知道如何。造成这种情况的原因是什么?如何解决?错误是在我的代码中、在我创建的充当服务器的虚拟机上还是在两者之间?我该如何最好地解决这个问题?
查看完整描述

1 回答

?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

我最终解决了这个问题,但没有找出根本原因。当我尝试通过 SSH 连接到虚拟机并在本地访问数据库时,我遇到了以下错误:

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2746.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Client unable to establish connection.

它看起来是一个版本控制问题 - 在我的安装脚本中,我替换了

sudo apt-get -y install mssql-server

sudo apt-get -y install mssql-server=14.0.3192.2-2

然后问题就消失了。


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 295 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信