Python连接MySQL数据库报错:1045访问拒绝问题求助
解决Python连接MySQL时的1045权限拒绝问题
嘿,刚接触Python连MySQL是吧?这个1045权限报错我当初踩过好多次坑,结合你用Flask的场景,给你梳理几个靠谱的排查方向:
1. 先确认MySQL用户的IP访问权限
MySQL的用户权限是和「用户名@访问IP」绑定的,你报错里显示的是'xxxxxxadmin'@'xx.xx.xx.xx',说明这个用户当前没有从这个IP访问数据库的权限:
- 登录到MySQL服务器(比如用本地终端或者数据库管理工具),执行这条SQL命令检查用户权限:
SELECT user, host FROM mysql.user WHERE user = 'xxxxxxadmin'; - 如果查询结果里没有
xx.xx.xx.xx这个IP,只有localhost或者127.0.0.1,那得给用户授权远程访问:
(要是想临时测试,也可以把GRANT ALL PRIVILEGES ON 你的数据库名.* TO 'xxxxxxadmin'@'xx.xx.xx.xx' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES;xx.xx.xx.xx换成%允许所有IP访问,但生产环境千万别这么干,尽量限制具体IP)
2. 别忽略最基础的:密码是否正确
我当初就是输错了密码还查了半小时!仔细核对你的Python脚本里的密码和MySQL用户的密码,注意大小写、特殊字符(比如@、#)有没有转义问题,别在连接字符串里写错了。
3. 检查MySQL服务器的远程访问开关
- 打开MySQL的配置文件(比如
my.cnf或my.ini),看看bind-address是不是设成了0.0.0.0(允许所有IP访问),如果是127.0.0.1那只能本地访问,改完记得重启MySQL服务。 - 还要检查服务器的防火墙,确保3306端口(MySQL默认端口)对你的客户端IP开放,不然就算权限对了也连不上。
4. 验证你的Flask连接字符串
因为你报错里提到了SQLAlchemy,所以你的数据库连接URL格式应该是这样的:
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://xxxxxxadmin:你的密码@xx.xx.xx.xx/你的数据库名'
仔细检查有没有漏写符号(比如://、@),用户名、IP、数据库名有没有拼写错误。
关于Flask的500日志
这个500错误就是数据库连接失败导致的后端异常,等你解决了1045的问题,这个日志自然会变成正常的响应状态码。
最后给个小技巧:先写个极简的测试脚本,脱离Flask环境直接测试连接,排除框架干扰,比如:
import pymysql try: conn = pymysql.connect( host='xx.xx.xx.xx', user='xxxxxxadmin', password='你的密码', db='你的数据库名' ) print("连接成功啦!") conn.close() except pymysql.err.OperationalError as e: print(f"出错了:{e}")
这样能更快定位到底是数据库的问题还是Flask配置的问题。
内容的提问来源于stack exchange,提问作者Denoteone




