英文:
How to ping remote mysql using golang
问题
我正在使用go
来ping一些Linux机器。
但是它的工作不准确,因为它总是需要近10秒钟才能连接到远程的mysql。
我使用的命令是:
mysql -u USER -p PASSWORD -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
}
英文:
I am using go
to ping some Linux machines.
But it is not work accurate, because it always needs almost 10 seconds to connect the remote mysql.
I use this command:
> mysql -u USER -p PASSWORD -h REMOTE_IP
So i want to know how to use linux command to know whether it open or not.
Then I will use golang 's exec.Command
to do that .
Here is my ping
code:
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
}
答案1
得分: 4
我假设你想知道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服务器")
user = flag.String("user", "root", "mysql用户")
pass = flag.String("password", "", "mysql密码")
)
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")
}
}
这段代码用于检查mysql是否可达。你可以根据需要修改服务器地址、用户名和密码。
英文:
I assume you want to know if mysql is reachable or not. 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")
}
}
答案2
得分: 2
如果你只需要检查与特定主机和端口的连接,你可以这样做:
package main
import (
"fmt"
"net"
)
const (
host = "192.168.2.1"
port = "3306" // 默认的MySQL端口
)
func main() {
conn, err := net.Dial("tcp", host+":"+port)
if err != nil {
panic(err)
}
defer conn.Close()
fmt.Printf("已连接到 %s \n", conn.RemoteAddr().String())
}
希望对你有帮助!
英文:
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())
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论