You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Golang GORM连接MySQL时出现1045访问拒绝错误求助

解决Gorm连接MySQL时的1045权限错误

以下是针对你遇到的Error 1045: Access denied for user 'root'@'localhost' (using password: YES)问题的几种排查和解决方法:

1. 修正DSN的占位符问题

你的代码中DSN里的<root>和<password>是占位符,必须替换成真实的用户名和密码,且不能保留尖括号。比如你的root密码是mypassword123,正确的DSN应该是:

dsn := "root:mypassword123@/simplerest?charset=utf8&parseTime=True&loc=Local"

如果密码包含特殊字符(如@、#、&等),需要进行URL编码,例如密码是pass@123,要写成pass%40123。

2. 指定连接协议(匹配终端的连接方式)

终端执行mysql -u root -p默认使用Unix Socket连接,而Gorm默认可能尝试TCP/IP连接,两者的认证规则可能不同。你可以在DSN中明确指定连接方式:

  • 使用TCP/IP连接:
dsn := "root:yourpassword@tcp(localhost:3306)/simplerest?charset=utf8&parseTime=True&loc=Local"
  • 使用Unix Socket连接(需替换为你的MySQL Socket实际路径,常见路径:Ubuntu是/var/run/mysqld/mysqld.sock,Mac是/tmp/mysql.sock):
dsn := "root:yourpassword@unix(/var/run/mysqld/mysqld.sock)/simplerest?charset=utf8&parseTime=True&loc=Local"

3. 确认目标数据库已存在

DSN中的simplerest数据库必须提前创建,登录MySQL终端执行以下命令确认:

CREATE DATABASE IF NOT EXISTS simplerest;

4. 验证root用户的访问权限

即使终端能登录,root用户可能仅被允许通过Socket访问,而非TCP/IP?登录MySQL后执行以下命令查看用户权限:

SELECT user, host FROM mysql.user WHERE user='root';

如果root的host仅为localhost,可以执行以下命令授权其访问目标数据库(替换为你的密码):

GRANT ALL PRIVILEGES ON simplerest.* TO 'root'@'localhost' IDENTIFIED BY 'yourpassword';
FLUSH PRIVILEGES;

5. 修复代码逻辑问题

你的代码中log.Fatal("Connection established")会在连接成功后直接终止程序,导致后续的db = d无法执行,建议改为:

log.Println("Connection established")

内容的提问来源于stack exchange,提问作者R.Vatsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:20:29