使用MySQL相关API时出现Incorrect file format 'inter'错误,断电后触发求解决
解决MySQL "Incorrect file format 'inter'" 错误(断电后触发)
兄弟,你这个情况太典型了——之前代码好好的,笔记本突然断电后就报Exception in thread "main" java.sql.SQLException: Incorrect file format 'inter',百分百是断电打断了MySQL的磁盘写入,把名为inter的表给搞坏了。别慌,咱们一步步来修复:
先确认表的损坏状态
首先登录MySQL命令行,跑一下这个命令检查目标表:
CHECK TABLE inter;
如果结果里显示repair needed,那实锤是表损坏了,直接往下走。
尝试常规修复方法
针对MyISAM表(如果你的表用的是这个引擎)
直接执行修复命令就行:
REPAIR TABLE inter;
执行完再用CHECK TABLE验证下,一般就能恢复。
针对InnoDB表(现在大多用这个引擎)
MyISAM的修复命令对InnoDB无效,咱们换个方式:
- 先停掉MySQL服务,找到你的MySQL数据目录(Linux一般是
/var/lib/mysql,Windows在C:\ProgramData\MySQL\MySQL Server X.X\Data) - 找到对应数据库文件夹里的
inter.frm和inter.ibd文件,务必先备份一份到其他地方——修复失败的话还能靠备份救数据 - 重启MySQL服务,执行这条命令重建表:
ALTER TABLE inter ENGINE=InnoDB;
这个命令会重新生成表的结构和数据文件,大部分轻度损坏的情况都能搞定。
常规方法不行?试试强制恢复导出数据
如果上面的方法没效果,那得用innodb_force_recovery来强制启动MySQL并导出数据,这是最后的救急手段:
- 停掉MySQL服务,打开MySQL的配置文件(
my.cnf或my.ini) - 在
[mysqld]区块里加一行:
innodb_force_recovery = 1
注意:先从1开始试,不行再逐步升到6(数值越高风险越大,6是最后选项,只能用来导出数据,不能用来正常运行)
3. 启动MySQL服务,然后导出损坏表的数据:
mysqldump -u 你的用户名 -p 你的数据库名 inter > inter_backup.sql
- 停掉MySQL服务,把刚才加的
innodb_force_recovery配置删掉,然后重新创建数据库和inter表,最后导入备份的sql文件:
mysql -u 你的用户名 -p 你的数据库名 < inter_backup.sql
给你提个预防建议
这次是断电踩坑,以后可以开启这两个MySQL配置降低风险:
innodb_flush_log_at_trx_commit = 1:确保每个事务提交时都把日志刷到磁盘sync_binlog = 1:确保二进制日志每写一次就刷到磁盘
虽然会稍微影响一点性能,但能大幅减少断电导致的表损坏概率。另外记得定期自动备份数据库,比如用mysqldump加定时任务,稳一点。
内容的提问来源于stack exchange,提问作者User505
相关产品推荐
相关产品推荐

