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

Django连接MariaDB报MySQLdb.OperationalError 1025错误如何解决?

Django连接MariaDB报错1025(errno 168)解决方案

该报错为MariaDB的InnoDB引擎执行ALTER TABLE操作(对应Django migrate的表结构变更动作)时,表文件重命名失败触发,可按以下步骤依次排查解决:

  • 检查数据库目录权限
    执行SQL命令show variables like 'datadir';获取MariaDB数据存储目录,确认对应业务库(本场景为mydb目录)的所属用户组为mysql、权限为700,执行如下命令修正:
    chown -R mysql:mysql /你的datadir路径/mydb
    chmod 700 /你的datadir路径/mydb
    
    修正后重启MariaDB服务再尝试执行Django迁移。
  • 清理遗留临时表文件
    错误日志中提到的#sql-backup-*前缀的临时文件如果残留在数据库目录中,会阻塞后续重命名操作。先停止MariaDB服务,进入对应mydb目录删除所有#sql-开头的文件,再重启服务。
  • 修复损坏的InnoDB表空间
    对报错的auth_permission表执行检查:CHECK TABLE auth_permission;
    若返回表损坏,执行修复命令:REPAIR TABLE auth_permission;
    修复失败的话可先导出表数据再重建表:
    # 导出表数据
    mysqldump -u 你的数据库用户名 -p mydb auth_permission > auth_permission.sql
    # 删除损坏表
    DROP TABLE IF EXISTS auth_permission;
    # 重新导入数据重建表
    mysql -u 你的数据库用户名 -p mydb < auth_permission.sql
    
  • 临时关闭外键检查规避约束干扰
    在Django项目的settings.py数据库配置中临时加入关闭外键检查的初始化命令,执行迁移完成后再移除该配置:
    DATABASES = {
        'default': {
            # 其余原有配置不变
            'OPTIONS': {
                'init_command': 'SET foreign_key_checks = 0;',
            }
        }
    }
    
    注意:仅在执行迁移时临时开启该配置,长期关闭外键检查会导致数据一致性风险
  • 确认表存储引擎一致性
    执行SQL命令SHOW CREATE TABLE auth_permission;查看该表存储引擎,若不是InnoDB,执行命令修改:
    ALTER TABLE auth_permission ENGINE=InnoDB;
  • 兜底方案:全库重建
    以上步骤均无效的情况下,将整个业务库导出后删除重建再导回数据:
    # 全库导出
    mysqldump -u 你的数据库用户名 -p --databases mydb > mydb_full.sql
    # 删除旧库
    DROP DATABASE mydb;
    # 新建库,字符集和排序规则可根据你的业务需求调整
    CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    # 导回数据
    mysql -u 你的数据库用户名 -p mydb < mydb_full.sql
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:57:02