大家好 我是寸铁
总结了一篇[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
的默认端口3306
端口,所以不存在命令行连接端口的问题,那就是说明MySQL
的服务没有开启。
可以选择命令方式开启,如下:
net start mysql
也可以选择使用计算机服务的方式开启,如下:
好的,在MySQL
服务开启后,我们再来试一下能否连接MySQL
连接成功!
按道理说,应该启动完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?charset=utf8mb4&parseTime=True&loc=Local
修改后,再次运行入口文件,如下:
连接成功!
针对上面的DataSource
进行结构分析!
字段 | 含义 |
---|---|
DataSource | 数据源,用于后续函数的导入数据源操作 |
root | 数据库的用户,可以是其他名字 |
: | : 后的内容是该用户登录对应的密码 |
@tcp | tcp 网络协议 |
() | 括号中的内容为MySQL 的地址和端口号 |
/ | / 后的内容为数据库的名字 |
charset | 数据库的字符集,常用utf8mb4 |
parseTime | 设置过期时间 |
loc | 值为Local 表示本地运行 |
?
后的内容根据需要进行配置,比如字符集、时间、本地验证等等- 如果要在API-fox/Postman进行测试接口,这里的MySQL的
loc
值一定要记得设置为Local
否则会出现如下结果
这就是没有设置loc
为local
的问题,即没有选择本地验证的方式!
其实,想一下确实如此,在有密码验证的方式下,怎么可能在外部可以进行测试!
本次的错误排查主要是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稳定的有序遍历的方式