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

MySQL升级失败无法启动:删除mysql.user表空间SDI报错求助

MySQL升级失败无法启动的修复与回滚方案

从日志信息来看,升级至MySQL 8.0.35时,执行ALTER TABLE user MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') NOT NULL;语句失败,错误码3664,核心原因是无法删除mysql表空间中mysql.user的SDI(序列化字典信息),导致升级中断,服务器启动失败。以下是具体修复与回滚方案:

修复方案

方法1:跳过升级检查启动,手动修正表结构

  • 停止当前MySQL进程:
    sudo systemctl stop mysql
    
  • 编辑MySQL配置文件(如/etc/mysql/mysql.conf.d/mysqld.cnf),添加以下参数:
    skip-grant-tables
    skip-innodb-read-only-compressed
    
  • 启动MySQL服务:
    sudo systemctl start mysql
    
  • 登录MySQL,手动执行表结构修改:
    ALTER TABLE mysql.user MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') NOT NULL;
    
    若仍报错,先清理SDI相关统计信息(操作前建议备份数据):
    DELETE FROM mysql.innodb_table_stats WHERE table_name='user';
    DELETE FROM mysql.innodb_index_stats WHERE table_name='user';
    
    再重新执行上述ALTER语句
  • 完成表结构修正后,执行升级收尾:
    mysql_upgrade -u root -p
    
  • 移除配置文件中添加的skip-grant-tables和skip-innodb-read-only-compressed参数,重启MySQL服务:
    sudo systemctl restart mysql
    

方法2:修复mysql表空间权限或损坏

  • 检查mysql.user表空间文件权限,确保归属mysql用户组:
    chown mysql:mysql /var/lib/mysql/mysql/user.ibd
    
  • 使用innochecksum检查表空间完整性:
    innochecksum /var/lib/mysql/mysql/user.ibd
    
    若检测到损坏,从备份恢复该表空间文件后,重新启动升级流程。

回滚方案

若修复难度较大,可回滚至升级前版本:

  • 停止当前MySQL进程:
    sudo systemctl stop mysql
    
  • 备份当前数据目录到安全位置:
    cp -r /var/lib/mysql /var/lib/mysql_backup_8035
    
  • 卸载当前8.0.35版本,安装升级前的MySQL版本
  • 将备份的旧版本数据目录替换回/var/lib/mysql,调整权限:
    chown -R mysql:mysql /var/lib/mysql
    
  • 启动旧版本MySQL,验证数据完整性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:23:09