Ubuntu18.04升级至20.04后MySQL故障,求无数据丢失恢复方案
解决Ubuntu升级后MySQL 8.0启动失败并恢复finance数据库的方案
一、终止MySQL循环重启
当前MySQL处于反复重启状态,先停止服务并禁用自动启动:
- 停止服务:
sudo systemctl stop mysql - 禁用自动启动:
sudo systemctl disable mysql
二、跳过升级检查启动MySQL
通过配置跳过权限验证和升级流程,临时启动服务:
- 编辑MySQL主配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf - 在
[mysqld]区块添加一行:skip-grant-tables - 启动服务:
sudo systemctl start mysql - 登录MySQL命令行:
mysql -u root
三、修复help_category表的SDI错误
进入MySQL后,处理导致升级失败的SDI问题:
- 切换到系统库:
USE mysql; - 尝试删除对应SDI记录:
DELETE FROM mysql.sdi WHERE id = (SELECT table_id FROM information_schema.tables WHERE table_schema='mysql' AND table_name='help_category'); - 若删除失败,直接重建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; - 退出MySQL,移除配置文件中的
skip-grant-tables,重启服务:sudo systemctl restart mysql
四、直接恢复finance数据库的备选方案
如果上述方法无效,直接迁移finance数据库文件:
- 确保故障机MySQL已停止:
sudo systemctl stop mysql - 备份finance数据库目录:
sudo cp -r /var/lib/mysql/finance /root/finance_backup - 在正常运行的MySQL 8.0环境中(可临时在本地安装),创建空数据库:
CREATE DATABASE finance CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci; - 停止该环境的MySQL服务,将备份的finance目录替换到
/var/lib/mysql/finance,修正权限:sudo chown -R mysql:mysql /var/lib/mysql/finance sudo chmod -R 700 /var/lib/mysql/finance - 启动服务,验证数据库:
mysql -u root -e "USE finance; SHOW TABLES;"
关键提醒
- 操作前必须完整备份
/var/lib/mysql目录,防止数据丢失 - 修复完成后执行
mysql_upgrade -u root -p,完成系统表的兼容性升级
内容的提问来源于stack exchange,提问作者Jaime Montoya
相关产品推荐
相关产品推荐

