【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

报错如下:

具体如下:

[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

  • 接着,右键点击启动即可

好的,在MySQL 服务开启后,我们再来试一下能否连接MySQL
连接成功!


修改yaml文件


按道理说,应该启动完MySQL 服务后,是可以成功连接的。毕竟一开始也在cmd 中连接测试成功了。
但是为什么还是报错了呢?


分析如下:

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

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


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

找到问题所在!

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

修改如下:

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

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

连接成功!


结构分析

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

字段含义
DataSource数据源,用于后续函数的导入数据源操作
root数据库的用户,可以是其他名字
后的内容是该用户登录对应的密码
@tcptcp网络协议
()括号中的内容为MySQL的地址和端口号
// 后的内容为数据库的名字
charset数据库的字符集,常用utf8mb4
parseTime设置过期时间
loc值为Local 表示本地运行
注意
  • " />

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


    结语

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

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

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

    往期好文

    保姆级教程

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

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

    【Go-Zero】手把手带你在goland中创建api文件并设置高亮


    报错解决

    【Go-Zero】Error: user.api 27:9 syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘ 报错解决方案及api路由注意事项

    【Go-Zero】Error: only one service expected goctl一键转换生成rpc服务错误解决方案

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

    【Go-Zero】Error 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)报错解决方案

    【Go-Zero】type mismatch for field “Auth.AccessSecret“, expect “string“, actual “number“报错解决方案

    【Go-Zero】Error: user.api 30:2 syntax error: expected ‘)‘ | ‘KEY‘, got ‘IDENT‘报错解决方案

    【Go-Zero】Windows启动rpc服务报错panic:context deadline exceeded解决方案


    Go面试向

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

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

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

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

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