Linux环境Golang连接MySQL配置DSN报错1045访问被拒绝如何解决
问题核心原因
你遇到的1045报错本质是MySQL用户认证信息和权限不匹配,终端能登录但代码不能的差异来自两者的连接方式和使用的账号完全不同:
- 终端执行
sudo mysql -u root -p走的是Unix Socket连接,用的是root用户,且MySQL密码为空 - 代码里配置的是走TCP协议连接127.0.0.1,用的是
hashem用户、密码为hashem,和你实际可用的账号配置完全对不上
解决方法
你可以根据自己的需求选以下任意一种方案调整:
方案1:直接用现有root用户测试连接
修改代码里的MySQL配置即可:
cfg := mysql.Config{ User: "root", // 换成你实际在用的root用户 Passwd: "", // 你root用户MySQL密码为空,这里留空即可 Net: "tcp", Addr: "127.0.0.1:3306", DBName: "recordings", AllowNativePasswords: true, }
改完重新运行即可输出Connected!。
方案2:创建代码里配置的hashem用户并授权
先进入MySQL终端,依次执行以下SQL命令:
-- 创建允许本地TCP连接的hashem用户,密码设为hashem CREATE USER 'hashem'@'127.0.0.1' IDENTIFIED BY 'hashem'; -- 给hashem用户分配recordings库的所有操作权限 GRANT ALL PRIVILEGES ON recordings.* TO 'hashem'@'127.0.0.1'; -- 刷新权限使配置生效 FLUSH PRIVILEGES;
执行完成后你原来的代码不需要改就能正常连接。
可选:和终端一样走Unix Socket连接
如果不需要走TCP连接,也可以把代码配置改成和终端一致的Unix Socket模式:
cfg := mysql.Config{ User: "root", Passwd: "", Net: "unix", Addr: "/var/run/mysqld/mysqld.sock", // 系统默认MySQL socket路径,可根据实际情况调整 DBName: "recordings", AllowNativePasswords: true, }
内容的提问来源于stack exchange,提问作者user17148257
相关产品推荐
相关产品推荐

