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

DigitalOcean Ubuntu 20.04下Python用SQLAlchemy连接MySQL被拒绝如何解决?

问题原因分析
  • 环境变量取值异常:报错日志显示尝试登录的数据库用户为or,与你预期使用的root用户不符,说明代码读取的DB_USER环境变量配置错误,可能是未配置、配置后未生效,或者运行代码的用户与配置环境变量的用户不一致。
  • MySQL root用户默认认证策略限制:Ubuntu 20.04 系统默认安装的MySQL服务,root用户默认采用auth_socket插件认证,仅允许操作系统root用户通过socket方式免密登录,这也是你执行sudo mysql -u root -p可以正常登录,但代码用密码连接会被拒绝的核心原因。
  • 数据库权限配置缺失:即使用户名和密码配置正确,如果对应的MySQL用户没有renko数据库的访问权限,或者允许登录的主机地址不匹配,也会触发该报错。
解决方案
  1. 验证环境变量配置
    在代码初始化Database类前添加打印逻辑,确认环境变量取值是否符合预期:
print("DB_USER:", os.getenv('DB_USER'))
print("DB_PASSWORD:", os.getenv('DB_PASSWORD'))
print("DB_HOST:", os.getenv('DB_HOST'))
print("DB_NAME:", os.getenv('DB_NAME'))

也可以直接在运行代码的终端执行echo $DB_USER查看取值,若不符合预期重新配置环境变量后再运行代码。

  1. 修改root用户认证方式(仅适用于使用root用户连接数据库的场景)
    登录MySQL后执行以下命令,将root用户的认证方式改为密码认证:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你设置的root用户密码';
FLUSH PRIVILEGES;

修改完成后退出,执行mysql -u root -p(不加sudo)输入密码测试是否可以正常登录。

  1. 配置数据库访问权限
    先确认renko数据库已创建,再给对应用户分配数据库权限:
CREATE DATABASE IF NOT EXISTS renko;
GRANT ALL PRIVILEGES ON renko.* TO '你的应用数据库用户名'@'localhost';
FLUSH PRIVILEGES;

注意:生产环境不建议直接使用root用户连接应用,建议单独创建专属的MySQL用户分配给应用使用,降低安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:39:01