当前位置:   article > 正文

golang 连接本地mysql报错怎么办,换一种连接方法_dial tcp: lookup redis on 114.114.114.114:53: no s

dial tcp: lookup redis on 114.114.114.114:53: no such host (code: 2)

因项目需要将动态测试结果数据保存,因数据量大,后期还要做一些数据分析,因此计划将数据暂写到本地的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
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
sql.Open()里面传的数据库信息基本和ip类型一样,只是把ip换成socket文件的地址就可
  • 1

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

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

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号