【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案

【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案

大家好 我是寸铁
总结了一篇[error] failed to initialize database, got error Error 1045 (28000):解决方案的文章✨
还包含配置jwt密钥的各种注意事项✨
喜欢的小伙伴可以点点关注

问题背景

大家好,我是寸铁,今天在使用Go-Zero 结合gorm 进行MySQL 数据库操作的时候,配置完对应的文件后,报错了,下面来看看是什么bug

报错如下:

【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案_第1张图片

具体如下:

[error] failed to initialize database, got error Error 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)
panic: 连接mysql数据库失败, error=Error 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES)

排查

启动MySQL服务

  • 首先,先看一下能不能通过命令行登录MySQL
    在这里插入图片描述
    发现无法通过命令行连接MySQL

我使用的是MySQL的默认端口3306 端口,所以不存在命令行连接端口的问题,那就是说明MySQL 的服务没有开启。
可以选择命令方式开启,如下:

net start mysql

也可以选择使用计算机服务的方式开启,如下:

  • 按住win + R
  • 接着输入services.msc
    【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案_第2张图片

  • 接着,右键点击启动即可
    【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案_第3张图片

好的,在MySQL 服务开启后,我们再来试一下能否连接MySQL
连接成功!
【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案_第4张图片


修改yaml文件


按道理说,应该启动完MySQL 服务后,是可以成功连接的。毕竟一开始也在cmd 中连接测试成功了。
但是为什么还是报错了呢?
【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案_第5张图片


分析如下:

  • 首先,这里提示需要密码验证登录,考虑到我的MySQL 是通过密码进行登录的,所以应该把正确的密码输入配置文件
  • 接着,在哪里输入密码呢?这里就涉及到yaml 文件了

Go-Zero中,使用goctl 一键转换后,生成的文件夹中有etc 这一层。

【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案_第6张图片


etc这一层中,存在yaml 文件,通常对环境的配置都放在yaml 文件中。所以这里,需要对该文件进行配置。

找到问题所在!

在这里插入图片描述

这里的密码是root 我设置的密码是123456
这就是连接不上的原因!

修改如下:

Mysql:
  DataSource: root:123456@tcp(127.0.0.1:3306)/zero_db?charset=utf8mb4&parseTime=True&loc=Local

修改后,再次运行入口文件,如下:

【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案_第7张图片

连接成功!


结构分析

针对上面的DataSource 进行结构分析!

字段 含义
DataSource 数据源,用于后续函数的导入数据源操作
root 数据库的用户,可以是其他名字
后的内容是该用户登录对应的密码
@tcp tcp网络协议
() 括号中的内容为MySQL的地址和端口号
/ / 后的内容为数据库的名字
charset 数据库的字符集,常用utf8mb4
parseTime 设置过期时间
loc 值为Local 表示本地运行
注意
  • ?后的内容根据需要进行配置,比如字符集、时间、本地验证等等
  • 如果要在API-fox/Postman进行测试接口,这里的MySQL的loc 值一定要记得设置为Local
    否则会出现如下结果

【Go-Zero】[error] failed to initialize database, got error Error 1045 (28000):报错解决方案_第8张图片

这就是没有设置loclocal的问题,即没有选择本地验证的方式!
其实,想一下确实如此,在有密码验证的方式下,怎么可能在外部可以进行测试!


结语

本次的错误排查主要是3个点

  • 一个是启动MySQL 服务,启动一次即可
  • 一个是yaml 文件配置MySQL登录密码或其他信息的正确
  • 涉及外部接口测试问题,MySQL 选择本地验证方式,即loc 的值为Local

看到这里的小伙伴,恭喜你又掌握了一个技能
希望大家能取得胜利,坚持就是胜利
我是寸铁!我们下期再见

往期好文

【保姆级教程】Windows11下go-zero的etcd安装与初步使用

【保姆级教程】Windows11安装go-zero代码生成工具goctl、protoc、go-zero

【Go面试向】defer与time.sleep初探

【Go面试向】defer与return的执行顺序初探

【Go面试向】Go程序的执行顺序

【Go面试向】rune和byte类型的认识与使用

【Go面试向】实现map稳定的有序遍历的方式

你可能感兴趣的:(go,golang,mysql,go-zero,yaml,配置)