[英]How to ping remote mysql using golang
我正在使用golang来对一些linux机器执行ping操作。但是它不能正常工作,因为连接远程mysql总是需要近10秒的时间。
我使用以下命令:
mysql -u用户-p密码-h REMOTE_IP
所以我想知道如何使用linux命令来知道它是否打开。
然后,我将使用golang的exec.Command
来执行此操作。
这是我的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
}
我假设您想知道mysql是否可访问。 您可以使用以下示例:
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")
}
}
如果您只需要检查与特定主机和端口的连接,则可以执行以下操作:
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.