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

Apache2部署Django项目提示root@localhost访问MySQL被拒绝错误

问题根因

报错本质是MySQL本地root@localhost用户默认采用auth_socket认证机制,而非密码认证:只有系统root用户(sudo执行命令时的身份)可以通过socket方式免密/带密码登录MySQL root用户,普通系统用户(包括Apache运行时的默认身份www-data)即使输入正确密码也会被拒绝访问。

解决方案

步骤1:修改MySQL root用户认证方式为密码认证

  1. 以系统root身份登录MySQL
sudo mysql -u root
  1. 执行命令修改认证插件,将你的MySQL root密码替换为你settings.py中配置的DATABASES字段下的PASSWORD值:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的MySQL root密码';
FLUSH PRIVILEGES;
exit;
  1. 验证修改生效:不加sudo执行登录命令,输入密码后能正常进入MySQL即为成功
mysql -u root -p

步骤2:调整Apache WSGI进程配置(可选,规避文件权限问题)

你当前的Apache配置中WSGI进程未指定运行用户,默认以www-data身份运行,容易出现项目文件读取权限问题。修改000-default.conf中的WSGIDaemonProcess配置项,添加运行用户和组参数:

WSGIDaemonProcess WhiteBoard python-path=/home/chunao/WhiteBoard/Backend/WhiteBoardBackEnd python-home=/home/chunao/WhiteBoard/Backend/WhiteBoardBackEnd/Backend user=chunao group=chunao

步骤3:重启Apache生效配置

sudo systemctl restart apache2

完成后访问Django服务即可正常连接数据库,普通用户执行python3 manage.py runserver也不会再抛出权限错误。

安全建议

生产环境不要直接用MySQL root用户对接业务服务,可单独创建专用数据库用户并仅授予对应库权限,操作示例:

CREATE USER 'django_user'@'localhost' IDENTIFIED BY '自定义安全密码';
GRANT ALL PRIVILEGES ON django_data_base.* TO 'django_user'@'localhost';
FLUSH PRIVILEGES;

修改settings.py中DATABASES的USER、PASSWORD参数为新创建的用户信息即可。


内容的提问来源于stack exchange,提问作者De Santa Michell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:54:03