出现错误 "dial tcp xxx:xxx:xxx:xxx:3306: connect: connection refused" 的情况是什么以及如何避免此错误

What is the scenario for getting error "dial tcp xxx:xxx:xxx:xxx:3306: connect: connection refused" and how to avoid this error

我有一个 api 正在调用 sql 连接。这是与某个远程服务器的 sql 连接。执行查询时出现错误“dial tcp xxx:xxx:xxx:xxx:3306: connect: connection refused”

Sql连接码

func ConnectToMysqlDB(dbUser, dbPassword, dbHost, dbName string) *sql.DB {
    connstr := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", dbUser, dbPassword, dbHost, "3306", dbName)
    var err error
    log.Println("Carrying mysql query", connstr)
    dB, err := sql.Open("mysql", connstr)
    if err != nil {
        log.Fatalf("error connection to mysql [%v] ..!!", err)
    }
    log.Print("mysql initialized ..!!")
    return dB
}

查询函数

func GetUserIDs(dB *sql.DB, users []string) []int {
    var newUsers []int
    var newUser int

    query := "SELECT id FROM phplist_user_user WHERE foreignkey in (%s)"
    var usersStr string
    for _, val := range users {
        usersStr = usersStr + "'" + val + "'" + ","
    }
    usersStr = strings.TrimSuffix(usersStr, ",")

    query = fmt.Sprintf(query, usersStr)

    rows, err := dB.Query(query)
    if err != nil {
        fmt.Printf("Error in query : [%v]", err)
    }
    defer rows.Close()
    for rows.Next() {
        rows.Scan(&newUser)
        newUsers = append(newUsers, newUser)
    }

    return newUsers
}

我收到错误的原因是什么:查询错误:[dial tcp xxx.xxx.xxx.xxx:3306: connect: connection refused]

我的两分钱:

  1. 使用 sql.DB 中的 Ping() 方法验证您是否真的连接到 mysql — 但是您必须注意某些错误可能是暂时的。例如,如果您遇到网络问题或数据库“重启”(高可用性取决于许多因素)
  2. 检查您使用的 IP 和端口是否正确。可能是数据库和应用程序在不同的网络或者数据库服务器绑定了多个网卡。

此外,看看这是否有帮助 https://github.com/go-sql-driver/mysql#allowcleartextpasswords