栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

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

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用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,然后输入密码,进入数据库管理界面

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
--------------
二、确保已经下载了针对Golang的mysql数据库驱动 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方式设置错误导致,默认情况下,依赖包会下载到GOPATHsrcgithub.com路径下,如果之前设置了go env -w GO111MODULE=on,则会下载到GOPATHpkgmodgithub.com路径下,导致招不到依赖包。

解决办法

方法1、将下载好的依赖包拷贝到GOPATHsrc路径下,即可。
方法2、设置go env -w GO111MODULE=off,重新下载,即可。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号