admin管理员组

文章数量:1619183

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

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

 [ERROR] [MY-013183] [InnoDB] Assertion failure: fil0fil: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、出问题的表数据导入新的临时库,确认完全没问题后重新导入到原数据库。

本文标签: Assertionfailureinnodbfil0filsize