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

使用XAMPP和Vagrant运行Django项目时执行makemigration或启动服务遭遇1045数据库访问拒绝错误的问题咨询

分析Django连接MySQL时出现"Access denied for user 'root'@'localhost' (using password: NO)"的原因

这个错误本质是Django没法成功连接到MySQL数据库,结合你用Vagrant+XAMPP的场景,我给你拆解几个最可能的原因:

  • 数据库配置参数不匹配:你的Django项目settings.py里的DATABASES配置肯定有问题。错误提示明确说了using password: NO,说明Django尝试用空密码去登录root用户,但你XAMPP里的MySQL root用户大概率是设置了密码的(毕竟XAMPP默认会给root设密码,或者你自己配置过)。要么是你在DATABASES里没写PASSWORD字段,要么是写了但值是空字符串,导致连接时没传密码,直接被MySQL拒绝了。

  • Vagrant虚拟机和宿主机的MySQL环境隔离:你是在Vagrant虚拟机里跑Django项目,而XAMPP的MySQL是装在你的本地宿主机上的。这时候Django里写的localhost对虚拟机来说,指的是虚拟机自己的本地,不是你的宿主机。如果虚拟机里没装MySQL,或者虚拟机里的MySQL root用户配置和XAMPP的不一样,自然连不上。就算你要连宿主机的MySQL,也得把数据库主机改成宿主机的IP地址(比如通常是192.168.33.1这类Vagrant默认的宿主机IP),还要确保XAMPP的MySQL允许外部IP访问(默认XAMPP的MySQL只允许localhost连接,得去改my.cnf或者my.ini里的绑定地址为0.0.0.0,还要给root用户授权允许从虚拟机IP登录)。

  • MySQL用户权限限制:XAMPP里的MySQL root用户默认可能只允许从localhost(也就是宿主机本身)登录,而虚拟机的IP不在允许的访问列表里。就算你密码对了,MySQL也会因为用户的host权限限制拒绝连接。这时候需要在MySQL里给root用户授权,允许从虚拟机的IP或者所有IP(用%)登录。

  • 混淆了两个MySQL环境:说不定你误以为用的是XAMPP的MySQL,但实际上Vagrant虚拟机里也安装了MySQL,而这个虚拟机里的root用户要么没设置密码(但你配置里写了密码),要么密码和你配置的不一致,导致连接失败。这时候得先搞清楚你的Django到底要连哪个MySQL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:17:48