Golang MySQL错误-packet.go:33:意外的EOF

我将整个代码库从PHP切换到Go,在运行的多个过程中,我随机遇到此错误:

[mysql] 2016/10/11 09:17:16 packets.go:33: unexpected EOF

这是我的db软件包,用于处理与数据库的所有连接:

package db

import (

"database/sql"

_ "github.com/go-sql-driver/mysql"

"pkg/db"

)

var connection *sql.DB

var err error

func GetConnection() *sql.DB {

if connection != nil {

fmt.Println("********** CHECKING PING")

err = connection.Ping()

if err == nil {

fmt.Println("************ CONNECTION STILL ACTIVE")

return connection

} else {

fmt.Println("********** PING ERROR: " + err.Error())

}

}

connection, err = sql.Open("mysql", db.DEVUSER + ":" + db.DEVUSER_PASSWORD + "@tcp(localhost:3306)/main?parseTime=true")

if err != nil {

panic(err)

}

return connection

}

我对此数据库包做错了什么,导致引发了此错误?该错误的确切含义是什么?如果打开了一个连接,我确保返回当前连接,因此对于多个请求,它使用同一连接对象。

这是mysql packet.go的摘录:

// Read packet to buffer 'data'

func (mc *mysqlConn) readPacket() ([]byte, error) {

var payload []byte

for {

// Read packet header

data, err := mc.buf.readNext(4)

if err != nil {

errLog.Print(err)

mc.Close()

return nil, driver.ErrBadConn

}

// Packet Length [24 bit]

pktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16)

if pktLen < 1 {

errLog.Print(ErrMalformPkt)

mc.Close()

return nil, driver.ErrBadConn

}

// Check Packet Sync [8 bit]

if data[3] != mc.sequence {

if data[3] > mc.sequence {

return nil, ErrPktSyncMul

}

return nil, ErrPktSync

}

mc.sequence++

// Read packet body [pktLen bytes]

data, err = mc.buf.readNext(pktLen)

if err != nil {

errLog.Print(err)

mc.Close()

return nil, driver.ErrBadConn

}

isLastPacket := (pktLen < maxPacketSize)

// Zero allocations for non-splitting packets

if isLastPacket && payload == nil {

return data, nil

}

payload = append(payload, data...)

if isLastPacket {

return payload, nil

}

}

}

第一个“ errLog.Print(err)”是“读取数据包头”部分中的第33行。

任何帮助是极大的赞赏!

我在连接包中添加了一些log.Println并让进程运行,就在出现此错误的地方,这就是控制台打印的内容:

********** CHECKING PING

************ CONNECTION STILL ACTIVE

[mysql] 2016/10/11 11:57:27 packets.go:33: unexpected EOF

********** CHECKING PING

************ CONNECTION STILL ACTIVE

回答:

看起来github问题的链接提供了此修复程序。至少对于我来说,此修复程序是将

设置为0。我已将服务器保持24小时的运行状态,每隔几个小时对它运行一次查询,但尚未重现该错误。

感谢@city提供链接。

以上是 Golang MySQL错误-packet.go:33:意外的EOF 的全部内容, 来源链接: utcz.com/qa/424905.html

回到顶部