因项目需要将动态测试结果数据保存,因数据量大,后期还要做一些数据分析,因此计划将数据暂写到本地的mysql,第一不会出现数据丢失,第二使用sql语句方便做一些聚合等等处理分析,很久之前已安装了mysql,但没有需求一直没有连接过,今天go代码发现报错如下:
dial tcp: lookup 114.114.114.114:53: no such host

DNS解析到114了。看了下电脑的DNS的确配置了114.114.114.114,删除配置还是没有解决,搜了一下貌似没有解决的方案,试了下python和数据库的一下工具都可以连接,网上也有人说是go的底层网络解析的问题,

无意中查到除了IP连接外,还有另外一种socket连接的方式,

Mysql有两种连接方式:
(1)TCP/IP
(2)socket
对mysql.sock来说,其作用是 程序与mysqlserver处于同一台机器,发起本地连接时可用。
例如你无须定义连接host的具体IP,只要为空或localhost就可以。
在此种情况下,即使你改变mysql的外部port也是一样可能正常连接。
因为你在my.ini中或my.cnf中改变端口后,mysql.sock是随每一次 mysql server启动生成的。已经根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。

代码如下:

//socket连本地
var DB *sql.DB

var dataBase = "root:123456@unix(/var/run/mysqld/mysqld.sock)/"

func conndb() *sql.DB {

	db, err := sql.Open("mysql", dataBase)
	if err != nil {
		fmt.Printf("open db fail:", err)
	}

	err = db.Ping()
	if err != nil {
		fmt.Printf("ping db fail:", err)``
	}
	//  _,err = DB.Exec("insert into analysis_test.devices set devices=?,time=?",devicename,time )
    // if err != nil{
    //     fmt.Printf("Insert db  failed,err:%v",err)
    //     // return
	// }
	return db
} 
sql.Open()里面传的数据库信息基本和ip类型一样,只是把ip换成socket文件的地址就可

安装地址不同,如何知道socket的地址呢?用这个命令就能查到:

mysql -uroot -p  #进入mysql
show variables like 'socket';

所以当你遇到一时不能解决的问题,换一个思路和方法,可以节省不少时间!