简体   繁体   English

如何使用Golang ping远程mysql

[英]How to ping remote mysql using golang

I am using golang to ping some linux machines。 But it is not work accurate,because it is always need almost 10 second to connet the remote mysql。 我正在使用golang来对一些linux机器执行ping操作。但是它不能正常工作,因为连接远程mysql总是需要近10秒的时间。

I use this command : 我使用以下命令:

mysql -u USER -p PASSWORD -h REMOTE_IP mysql -u用户-p密码-h REMOTE_IP

So i want to know how to use linux command to know whether it open or not. 所以我想知道如何使用linux命令来知道它是否打开。

Then I will use golang 's exec.Command to do that . 然后,我将使用golang的exec.Command来执行此操作。

Here is my ping code: 这是我的ping代码:

package main

import (
    "errors"
    "fmt"
    "github.com/tatsushid/go-fastping"
    "net"
    "net/smtp"
    "strings"
    "time"
)

func main(){
    err := ping("192.168.2.1")
    if err != nil{
        fmt.Println("WARNING!!!!!!")
    }
}
func ping(ip string) error {
    p := fastping.NewPinger()
    ra, err := net.ResolveIPAddr("ip", ip)
    if err != nil {
        return err
    }
    p.AddIPAddr(ra)
    found := false
    p.OnRecv = func(addr *net.IPAddr, rtt time.Duration) {
        found = true
    }
    err = p.Run()
    if err != nil {
        return err
    }
    if !found {
        return errors.New("response error")
    }
    return nil
}

I assume you want to know if mysql is reachable or not. 我假设您想知道mysql是否可访问。 You can use following example: 您可以使用以下示例:

package main

import (
    "database/sql"
    "flag"
    "fmt"
    "log"

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

func main() {
    var (
        server = flag.String("mysql", "localhost:3306", "mysql server")
        user   = flag.String("user", "root", "mysql user")
        pass   = flag.String("password", "", "mysql password")
    )
    flag.Parse()

    db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/", *user, *pass, *server))
    if err != nil {
        log.Fatalln(err)

    }
    defer db.Close()

    err = db.Ping()

    if err != nil {
        log.Fatalln(err)

    } else {
        log.Println("mysqld is alive")

    }

}

If you just need to check connection to a specific host & port, you can do this as: 如果您只需要检查与特定主机和端口的连接,则可以执行以下操作:

package main

import (
    "fmt"
    "net"
)

const (
    host = "192.168.2.1"
    port = "3306" // default MySQL port
)

func main() {

    conn, err := net.Dial("tcp", host+":"+port)
    if err != nil {
        panic(err)
    }
    defer conn.Close()

    fmt.Printf("Connected to %s \n", conn.RemoteAddr().String())
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM