我在golang项目中从MySQL数据库中获取数据时遇到问题。在我从Ubuntu 16.04升级到Ubuntu 18.04.01之前,该项目一直没有问题。现在,应用程序在连接数据库时超时。
我首先想到的是,从16.04升级到18.04时发生了问题。为了证明这一点,我启动了一个新的运行16.04的VM,执行了“ do-release-upgrade”并将其升级到18.04。但是,在此VM上,我的应用程序运行正常,没有问题。
我无所适从这里去解决正在发生的事情。这是两种配置的摘要。 VM(正在运行)和服务器(不在运行)都在下面;
Ubuntu 18.04.01 LTS x86_64
内核4.15.0-34-通用
转到1.11
MySQL 5.7.23-0ubuntu
这是我的测试程序:
包主
import (
"fmt"
"database/sql"
_"github.com/go-sql-driver/mysql"
)
func main() {
fmt.Printf("Connecting to db\n")
db,err := sql.Open("mysql","Test:@/Test")
if err != nil {
panic(err)
}
fmt.Printf("Trying query Row\n")
var Data int
err = db.QueryRow("SELECT Data FROM Test WHERE ID=2").Scan(&Data)
fmt.Printf("After Query\n")
if err != nil {
panic(err)
}
fmt.Printf("Got Data=%d\n",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没有错。我可以以Test用户身份连接并运行查询。
我不确定在两种配置相同的情况下如何继续查找服务器故障但VM运行的原因。
任何帮助将不胜感激。
答案 0 :(得分:0)
我可以考虑两种可能性:
答案 1 :(得分:0)
回答我的问题只是为了结束它,但感谢Peter提出我的解决方案的意见。
问题特别是我的防火墙规则。我对原籍国有严格的规定,但无意中阻止了来自127.0.0.1的流量。一旦我为此做出例外,一切都会正常。