go连接mysql_Go连接MySQL的方式问题

本文介绍了在Go中连接MySQL时遇到的问题及其解决方案。当默认方式`user:password@/test`无法连接时,提供了三种不同的连接代码:通过UNIX套接字、指定IP和端口以及默认方式。内容涉及到连接方式的区别、端口号限制以及MySQL用户管理,特别是`root`用户的host和权限问题。理解这些问题有助于解决Go连接MySQL时的权限和配置错误。
摘要由CSDN通过智能技术生成

在系统安装好mysql,go以及mysql-go的驱动之后,需要做的就是连接mysql,给个简短的连接数据库代码如下:

package main

import (

"database/sql"

"fmt"

_ "github.com/go-sql-driver/mysql"

)

func main() {

db, err := sql.Open("mysql", "user:password@/test")//对应数据库的用户名和密码

defer db.Close()

if err != nil {

panic(err)

} else {

fmt.Println("success")

}

rows, err := db.Query("SELECT number FROM squarenum")

if err != nil {

panic(err)

return

}

for rows.Next() {

var name int

err = rows.Scan(&name)

if err != nil {

panic(err)

}

fmt.Println(name)

}

}以上代码是默认情况下的连接方式,但在某种状况下,上述方式连接不上的时候,而且提示:

panic: runtime error: invalid memory address or nil pointer dereference经过查阅多方资料,找到的答案是指定具体连接mysql的方式有三种不同代码:

db, err := sql.Open("mysql", "user:password@unix(/tmp/mysql.sock)/test")

db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/test")   //指定IP和端口

db, err := sql.Open("mysql", "user:password@/test")  //默认方式

那么,这两种方式的区别在哪呢?首先可以看下面两幅图片:

d01277a6038e3b2d7a44d10eddf5b1de.png

e2a2817a547c9261e2b2a8f0a89230c1.png

每一次外部以某种身份连接到mysql的时候,mysql会新增一个Connection id,Connection显示的是该程序连接到mysql的连接方式。

图片中给出了两个不同用户的状态,注意两个用户的连接方式,一个是via TCP/IP,另一个是via UNIX socket。还发现一个微小的问题,就是端口号指定问题,端口号的范围是0-65535,因此对于大于65535的端口号会出现系统识别不了的问题。这只是对像我一样的初学者的提醒。

bcc1a4719074c80e877e110440fff45d.png

查看用户发现一个问题就是,系统为什么会有那么多的root用户,其实对于mysql而言,host+username才是一个基本单位,所以可以认为root在不同host名下是不同的用户

1、::1应该是表示本地的v6地址

2、没有用户名的话,应该是匿名用户了

3、对于mysql来讲,127.0.0.1和localhost应该不一样的;

在采用默认连接方式,即③的时候,panic: Error 1045: Access denied for user 'root'@'localhost' (using

password: YES)

证明系统默认选择的root是没有密码的,如果需要用root@localhost需要额外指定,如:db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/test")

综上所述,问题大致源于用户管理问题,所以理清这些问题,自然就可以解决出现的问题。

有疑问加站长微信联系(非本文作者)

5c5fbae790ec0313d6ee17e8b3dd9ba1.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值