You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.cnfmy.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

火山引擎 最新活动