解决Mysql8.0循环启动失败[MY-013183] [InnoDB] Assertion failure:fil0fil.cc:initial_fsize== (file->size*phy

本文讲述了在本地测试环境中,Mysql因磁盘满导致断言错误宕机的处理过程,包括检查错误日志、清理磁盘空间、使用`innodb_force_recovery`参数强制恢复、数据备份和恢复等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在本地测试环境跑数据过程中磁盘满了导致Mysql出现了断言错误宕机,无法重启。

2、tail -n 100 mysql_error.log 得到关键错误信息

 [ERROR] [MY-013183] [InnoDB] Assertion failure: fil0fil.cc:10661:initial_fsize == (file->size * phy_page_size) thread 140342456231488

mysql判断 初始化文件大小与【文件大小*物理页大小】不一致

3、清理出一定的磁盘空间

4、参考官方文档 mysql强制恢复文档 MySQL :: MySQL 8.0 Reference Manual :: 15.21.3 Forcing InnoDB Recovery 。

在mysql配置文件中增加 一行

innodb_force_recovery = 1

如果1不行,继续尝试2 和3,不可轻易尝试 4、5、6,因为4、5、6会造成更大的数据损害,而且3及以下虽然不能增删改查,但是可以操作删除表,而4及以上不再能删除表。

5、如果innodb_force_recovery = 3还启动不了,回顾下当时可能哪几个表在更新数据。

将数据库目录下的表ibd文件移走。重新尝试innodb_force_recovery1到3启动。应该可以启动成功。

6、启动后将被移走的ibd文件重新移回数据库文件夹目录内。此时可以Select历史的表内数据。Select 到新数据时候会重新触发断言错误,导致mysql自动重启。

7、将出问题的表数据备份

8、通过mysql客户端命令 drop table删除这个出问题 的表。

9、删除mysql配置文件中的 innodb_force_recovery配置。

10、重启 mysql,应该可以正常启动起来。

11、出问题的表数据导入新的临时库,确认完全没问题后重新导入到原数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值