使用go链接MySQL数据库报错:Error 1045: Access denied for user ‘root‘@‘localhost‘ (using password: YES)

问题描述

使用go链接MySQL数据库时报错:Error 1045: Access denied for user 'root'@'localhost' (using password: YES)

原因分析

链接语句没有包含创建数据库时的密码, 或包含的密码错误

解决办法

一. 首先确保已经创建了数据库

创建方法如下(如果已经创建请直接跳到步骤二阅读):

创建mysql数据库

1.1 进入数据库管理界面mysql -u root -p

假定已经在电脑上成功安装了mysql数据库。
CMD里输入mysql -u root -p,然后输入密码,进入数据库管理界面
使用go链接MySQL数据库报错:Error 1045: Access denied for user ‘root‘@‘localhost‘ (using password: YES)_第1张图片

1.2 创建数据库CREATE DATABASE 数据库名;

在管理界面输入CREATE DATABASE test_01;创建名为test_01的数据库:注意:不要遗漏了命令后的;符号。

mysql> CREATE DATABASE test_01;
Query OK, 1 row affected (0.01 sec)

1.3 选择要使用的数据库USE 数据库名;

在管理界面输入USE test_01;, 选择使用刚刚创建的数据库或已经创建好的其他数据库:

mysql> USE test_01;
Database changed

1.4 查看数据库状态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
--------------

二、确保已经下载了针对Golangmysql数据库驱动

2.1 下载mysql数据库驱动

CMD里输入命令:go get -u github.com/go-sql-driver/mysql

2.2 导入mysql驱动依赖包

import (
	"fmt"
	"database/sql"
	"log"
	_ "github.com/go-sql-driver/mysql"
)

2.3 连接到数据库sql.Open()

db, err := sql.Open("驱动名", "用户名:密码@(127.0.0.1:3306)/数据库名?parseTime=true")  //连接数据库

因为下载的驱动是mysql,所以这里使用的驱动名为:mysql
数据库名就是步骤1.3中选择使用的数据库名字。

2.4 一个简单的例子

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

问题二 成功下载了MySQL数据库驱动程序,但导入时提示找不到依赖包

原因分析

可能是因为包管理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,重新下载,即可。

你可能感兴趣的:(mysql,数据库,golang)