赞
踩
因项目需要将动态测试结果数据保存,因数据量大,后期还要做一些数据分析,因此计划将数据暂写到本地的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';
所以当你遇到一时不能解决的问题,换一个思路和方法,可以节省不少时间!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。