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

Python连接MySQL报1045权限错误求助:WorkBench及CMD可正常连接

解决MySQLdb连接本地MySQL时的1045权限错误

看起来你遇到的问题挺典型的——明明用MySQL Workbench和CMD的mysql命令都能正常连到数据库,但用Python的MySQLdb库就弹出Access denied for user 'root'@'localhost'的错误。我来帮你拆解一下可能的原因和解决办法:

核心原因:MySQL的localhost vs 127.0.0.1权限差异

MySQL对localhost和127.0.0.1的认证逻辑是不一样的:

  • 当你用mysql -u root -p或者WorkBench连接localhost时,MySQL默认用Unix socket(Windows是named pipe)来连接,对应的权限是root@localhost。
  • 但你的Python代码里指定了host="127.0.0.1",这会触发TCP/IP连接,对应的权限是root@127.0.0.1——很可能你的MySQL没有给这个账号配置TCP连接的权限。

具体解决步骤

1. 先验证权限差异

登录到MySQL(用你能成功连接的方式,比如CMD的mysql -u root -p),执行以下命令查看root账号的权限条目:

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

如果结果里只有root@localhost,没有root@127.0.0.1或者root@%(允许所有IP),那就是权限的问题了。

2. 给root账号添加TCP连接权限

在MySQL命令行里执行:

GRANT ALL PRIVILEGES ON test.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;

这条命令会给root@127.0.0.1账号授予test数据库的所有权限,并且设置密码为你的MyNewPass。

3. 修改Python代码适配socket连接(可选)

如果不想修改权限,也可以把Python代码里的host改成localhost,让它用socket连接:

db = MySQLdb.connect(host = "localhost", user="root", passwd="MyNewPass", db="test", port=3306)

注意:有些Linux环境下可能需要额外指定socket参数,比如socket="/var/run/mysqld/mysqld.sock",Windows下一般不用额外配置。

4. 检查MySQLdb与MySQL版本兼容性

从报错路径看你用的是Python2.7的MySQLdb,如果你搭配的是MySQL 8.0+版本,要注意:MySQL 8.0以上默认用caching_sha2_password认证插件,而旧版MySQLdb不支持这个,这时候需要把root账号的认证方式改成mysql_native_password:

ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'MyNewPass';
FLUSH PRIVILEGES;

测试验证

修改完之后,重新运行你的Python代码,应该就能成功连接了。如果还是有问题,可以再检查一下:

  • 密码有没有输错(注意大小写)
  • MySQL服务是否正常运行
  • 本地防火墙有没有拦截3306端口(不过本地连接一般不会有这个问题)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:08:56