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

Ubuntu18.04升级至20.04后MySQL故障,求无数据丢失恢复方案

解决Ubuntu升级后MySQL 8.0启动失败并恢复finance数据库的方案

一、终止MySQL循环重启

当前MySQL处于反复重启状态,先停止服务并禁用自动启动:

  • 停止服务:sudo systemctl stop mysql
  • 禁用自动启动:sudo systemctl disable mysql

二、跳过升级检查启动MySQL

通过配置跳过权限验证和升级流程,临时启动服务:

  1. 编辑MySQL主配置文件:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 在[mysqld]区块添加一行:skip-grant-tables
  3. 启动服务:sudo systemctl start mysql
  4. 登录MySQL命令行:mysql -u root

三、修复help_category表的SDI错误

进入MySQL后,处理导致升级失败的SDI问题:

  1. 切换到系统库:USE mysql;
  2. 尝试删除对应SDI记录:
    DELETE FROM mysql.sdi WHERE id = (SELECT table_id FROM information_schema.tables WHERE table_schema='mysql' AND table_name='help_category');
    
  3. 若删除失败,直接重建help_category表:
    DROP TABLE IF EXISTS mysql.help_category;
    CREATE TABLE mysql.help_category (
      help_category_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
      name VARCHAR(64) NOT NULL,
      parent_category_id INT UNSIGNED NULL,
      url VARCHAR(128) NOT NULL,
      PRIMARY KEY (help_category_id),
      UNIQUE KEY name (name)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
    
  4. 退出MySQL,移除配置文件中的skip-grant-tables,重启服务:sudo systemctl restart mysql

四、直接恢复finance数据库的备选方案

如果上述方法无效,直接迁移finance数据库文件:

  1. 确保故障机MySQL已停止:sudo systemctl stop mysql
  2. 备份finance数据库目录:sudo cp -r /var/lib/mysql/finance /root/finance_backup
  3. 在正常运行的MySQL 8.0环境中(可临时在本地安装),创建空数据库:
    CREATE DATABASE finance CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
    
  4. 停止该环境的MySQL服务,将备份的finance目录替换到/var/lib/mysql/finance,修正权限:
    sudo chown -R mysql:mysql /var/lib/mysql/finance
    sudo chmod -R 700 /var/lib/mysql/finance
    
  5. 启动服务,验证数据库:mysql -u root -e "USE finance; SHOW TABLES;"

关键提醒

  • 操作前必须完整备份/var/lib/mysql目录,防止数据丢失
  • 修复完成后执行mysql_upgrade -u root -p,完成系统表的兼容性升级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:17:14