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

使用Go database/sql无法连接MySQL 5.7的问题求助

解决Go连接MySQL 5.7报1130错误的问题

问题原因

命令行通过mysql -u root -pxxx -h localhost连接时,MySQL默认使用Unix socket(Windows下是命名管道)方式建立连接,此时识别的主机是localhost;而Go代码里@tcp(localhost:3306)是强制用TCP/IP协议连接,MySQL会将其识别为来自127.0.0.1的请求。你的MySQL 5.7中root账号仅授权了localhost(socket连接),未授权127.0.0.1(TCP连接),所以触发1130错误。MySQL 8默认已对127.0.0.1授权,因此可以正常连接。

解决方案

方案1:改用Socket连接(推荐,和命令行连接方式一致)

修改Go代码中的DSN,使用Unix socket路径替代TCP地址:

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

// 替换为你的MySQL实际socket路径
db, err := sql.Open("mysql", "root:xxx@unix(/var/run/mysqld/mysqld.sock)/mydb")
if err != nil {
    // 处理错误
}
err = db.Ping()

不同系统的socket路径参考:

  • Linux:/var/run/mysqld/mysqld.sock
  • macOS(Homebrew安装):/tmp/mysql.sock
  • Windows:可以尝试使用pipe://./pipe/mysql作为socket路径

方案2:给127.0.0.1的root账号授权

如果需要保持TCP/IP连接方式,登录MySQL命令行执行以下授权语句:

-- 授权root从127.0.0.1访问mydb数据库的所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'xxx';
-- 刷新权限使设置生效
FLUSH PRIVILEGES;

执行完后,原Go代码即可正常连接。

内容的提问来源于stack exchange,提问作者clarkk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:22:11