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

Django通过Apache+wsgi部署时连接MariaDB 5.5.68出现_mysql未定义报错

问题成因
  1. mod_wsgi版本不匹配:本地开发使用Python3.9,但Apache加载的系统默认mod_wsgi通常对应系统预装的Python版本(多数是Python2或低版本Python3),无法正确加载Python3.9虚拟环境里的依赖包,导致mysqlclient的底层_mysql扩展模块无法识别。
  2. wsgi.py配置错误:手动添加了大量冗余且有语法错误的路径:虚拟环境路径存在换行断裂,且单独把MySQLdb目录加入sys.path反而会干扰模块的正常导入逻辑,导致_mysql扩展找不到。
  3. 权限不足:虚拟环境放在用户home目录下,Apache运行用户(通常是apache、www-data)默认没有home目录的读取权限,无法加载虚拟环境内的依赖文件。
  4. mysqlclient编译不完整:安装mysqlclient时系统缺少MariaDB对应开发依赖,导致编译时没有生成_mysql底层扩展模块,只有上层Python封装代码。
解决方案

1. 修正wsgi.py配置

删掉所有冗余的sys.path配置,使用正确的虚拟环境激活逻辑,参考配置如下:

import os
import sys

# 替换为你的项目根目录路径
PROJECT_DIR = '/var/www/trackx_proj/trackx_root'
# 替换为你的虚拟环境根目录路径
VENV_DIR = '/home/bakert/.local/share/virtualenvs/trackx_proj_master-nygxcPTP'

sys.path.insert(0, PROJECT_DIR)
sys.path.insert(0, f"{VENV_DIR}/lib/python3.9/site-packages")

# 激活虚拟环境
activate_this = f"{VENV_DIR}/bin/activate_this.py"
with open(activate_this) as f:
    exec(f.read(), {'__file__': activate_this})

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'trackx.settings')

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

注意:不要在路径中间加换行,确保虚拟环境路径是完整连续的字符串。

2. 修复mod_wsgi版本匹配

卸载系统源安装的mod_wsgi,使用虚拟环境内的mod_wsgi配置Apache:

  • 先在虚拟环境内执行pip install mod_wsgi,确保编译对应Python3.9的版本
  • 执行mod_wsgi-express module-config,将输出的配置写入Apache的mods-available/wsgi.load文件,替换原有mod_wsgi加载配置
  • 重启Apache服务

3. 修复权限问题

建议将虚拟环境迁移到/var/www目录下,避免home目录权限限制,执行如下命令:

mv /home/bakert/.local/share/virtualenvs/trackx_proj_master-nygxcPTP /var/www/venv_trackx

然后给Apache用户授予目录权限:

# CentOS/RHEL 系
chown -R apache:apache /var/www/trackx_proj /var/www/venv_trackx
# Debian/Ubuntu 系
chown -R www-data:www-data /var/www/trackx_proj /var/www/venv_trackx

同时将wsgi.py内的虚拟环境路径更新为新的/var/www/venv_trackx。

4. 重新编译mysqlclient

先安装系统级MariaDB开发依赖:

# CentOS/RHEL 系
yum install -y mariadb-devel gcc python39-devel
# Debian/Ubuntu 系
apt install -y libmariadb-dev gcc python3.9-dev

然后激活虚拟环境,重装mysqlclient:

pip uninstall -y mysqlclient
pip install mysqlclient==2.0.1

5. 补充Apache虚拟主机配置(可选,更稳定)

在Apache的站点配置中指定WSGI进程的Python路径,不需要在wsgi.py内手动处理路径,参考配置:

<VirtualHost *:80>
    ServerName 你的站点域名
    WSGIDaemonProcess trackx python-path=/var/www/trackx_proj/trackx_root:/var/www/venv_trackx/lib/python3.9/site-packages
    WSGIProcessGroup trackx
    WSGIScriptAlias / /var/www/trackx_proj/trackx_root/trackx/wsgi.py

    <Directory /var/www/trackx_proj/trackx_root/trackx>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>

    # 静态文件、媒体文件配置省略
</VirtualHost>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:42:03