Ubuntu 升级后的 Golang MySQL 连接超时



我在从MySQL数据库获取数据时遇到问题。这个项目一直在工作,直到我从 Ubuntu 16.04 升级到 Ubuntu 18.04.01。现在,应用程序在连接到数据库时超时。

我的第一个想法是 16.04 到 18.04 升级时有什么东西坏了。为了证明这一点,我启动了一个运行 16.04 的新 VM,执行了"执行发布升级"并将其提升到 18.04。但是,在此 VM 上,我的应用程序运行良好,没有问题。

我不知道从哪里去解决正在发生的事情。以下是两种配置的摘要。VM(工作(和服务器(不工作(如下;

Ubuntu 18.04.01LTS x86_64
内核 4.15.0-34-generic
Go 1.11
MySQL 5.7.23-0ubuntu

这是我的测试程序:
包主

import (
"fmt"
"database/sql"
_"github.com/go-sql-driver/mysql"
)
func main() {
fmt.Printf("Connecting to dbn")
db,err := sql.Open("mysql","Test:@/Test")
if err != nil {
panic(err)
}
fmt.Printf("Trying query Rown")
var Data int 
err = db.QueryRow("SELECT Data FROM Test WHERE ID=2").Scan(&Data)
fmt.Printf("After Queryn")
if err != nil {
panic(err)
}
fmt.Printf("Got Data=%dn",Data)
db.Close()
}

在 VM 上,程序可以毫无问题地执行并返回一些有效数据。服务器在 QueryRow 行上挂起。2分钟后我得到这个回报

$ time ./test
Connecting to db
Trying query Row
After Query
panic: dial tcp 127.0.0.1:3306: connect: connection timed out
goroutine 1 [running]:
main.main()
/home/daedalus/test/sqltest.go:20 +0x263
real    2m10.874s
user    0m0.001s
sys 0m0.009s

我意识到问题是程序无法连接到数据库,或者数据库没有响应,但我看不出原因。在 syslog、mysql 的日志文件中也没有记录任何内容。我可以看到MySQL没有任何问题。我可以作为测试用户连接和运行查询。

我不确定如何继续跟踪服务器出现故障的原因,但是当两个配置相同时,虚拟机仍在工作。

任何帮助将不胜感激。

我可以考虑两种可能性:

  • MySQL服务器缺少用户"Test@127.0.0.1",但具有用户"Test@localhost">
  • 服务器防火墙阻止访问 127.0.0.1 上的端口 3306

回答我的问题只是为了结束它,但谢谢彼得的评论,导致了我的解决方案。

问题具体出在我的防火墙规则上。我对原产国有一些严格的规定,但无意中阻止了来自 127.0.0.1 的流量。一旦我为此破例,一切正常。

最新更新