使用go链接MySQL数据库时报错:Error 1045: Access denied for user 'root'@'localhost' (using password: YES)
链接语句没有包含创建数据库时的密码, 或包含的密码错误
创建方法如下(如果已经创建请直接跳到步骤二阅读):
mysql
数据库mysql -u root -p
假定已经在电脑上成功安装了mysql
数据库。
在CMD
里输入mysql -u root -p
,然后输入密码,进入数据库管理界面
CREATE DATABASE 数据库名;
在管理界面输入CREATE DATABASE test_01;
创建名为test_01
的数据库:注意:不要遗漏了命令后的;
符号。
mysql> CREATE DATABASE test_01;
Query OK, 1 row affected (0.01 sec)
USE 数据库名;
在管理界面输入USE test_01;
, 选择使用刚刚创建的数据库或已经创建好的其他数据库:
mysql> USE test_01;
Database changed
status
在管理界面输入status
,查看当前使用的数据库及数据库的状态:
mysql> status
--------------
mysql Ver 8.0.28 for Win64 on x86_64 (MySQL Community Server - GPL)
Connection id: 38
Current database: test_01
Current user: root@localhost
SSL: Cipher in use is TLS_AES_256_GCM_SHA384
Using delimiter: ;
Server version: 8.0.28 MySQL Community Server - GPL
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: utf8mb3
Db characterset: utf8mb3
Client characterset: utf8mb3
Conn. characterset: utf8mb3
TCP port: 3306
Binary data as: Hexadecimal
Uptime: 3 hours 18 min 24 sec
Threads: 2 Questions: 86 Slow queries: 0 Opens: 227 Flush tables: 3 Open tables: 137 Queries per second avg: 0.007
--------------
Golang
的mysql
数据库驱动mysql
数据库驱动在CMD
里输入命令:go get -u github.com/go-sql-driver/mysql
mysql
驱动依赖包import (
"fmt"
"database/sql"
"log"
_ "github.com/go-sql-driver/mysql"
)
sql.Open()
db, err := sql.Open("驱动名", "用户名:密码@(127.0.0.1:3306)/数据库名?parseTime=true") //连接数据库
因为下载的驱动是mysql
,所以这里使用的驱动名为:mysql
。
数据库名就是步骤1.3中选择使用的数据库名字。
package main
import (
"fmt"
"database/sql"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db ,err := sql.Open("mysql", "root:用户密码@(127.0.0.1:3306)/test_01?parseTime=true") //用户密码替换为自己的密码
if err != nil {
fmt.Println("创建数据库入库对象sql.DB失败!")
log.Fatal(err)
}else {
fmt.Println("创建数据库入库对象sql.DB成功!")
}
if err := db.Ping(); err != nil { //测试数据库是否正常
fmt.Println("连接数据库失败!")
log.Fatal(err)
}else {
fmt.Println("连接数据库成功!")
}
}
运行效果:
D:\go 练习>go run sql_connect.go
创建数据库入库对象sql.DB成功!
连接数据库成功!
go get
命令从github
下载数据库驱动超时报错:在使用go get
从GitHub上拉取包时,报错:
go get -u github.com/julienschmidt/httprouter go get: module github.com/julienschmidt/httprouter: Get "https://proxy.golang.org/github.com/julienschmidt/httprouter/@v/list": dial tcp 142.251.42.241:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
还有另一种错误:
net/http: TLS handshake timeout
Go env中默认使用的官方代理:
GOPROXY=https://proxy.golang.org,direct
国内网络原因,无法访问,或访问较慢导致
设置为中国go
代理,在cmd中输入:
go env -w GOPROXY=https://goproxy.cn,direct
可能是因为包管理Go Modules
方式设置错误导致,默认情况下,依赖包会下载到GOPATH\src\github.com\
路径下,如果之前设置了go env -w GO111MODULE=on
,则会下载到GOPATH\pkg\mod\github.com\
路径下,导致招不到依赖包。
方法1、将下载好的依赖包拷贝到GOPATH\src\
路径下,即可。
方法2、设置go env -w GO111MODULE=off
,重新下载,即可。