这周给自己放了个假,每天不好好学习技术,光去研究楚国800年,秦始皇是不是死于非命了。。 但是,在大家的督促下,我又来更新了! 上周,在单位里写数据库应急预案的文档,看到同事之前写的MySQL表损坏应急处理的相关内容。之前都没怎么了解过这块内容,所以就去网上搜了下,看了看官方文档,想着简单整理了一下。 导致MySQL表损坏的几种常见原因: 1.磁盘故障;2.服务器故障,异常关机等;3.mysql bug等。
不同存储引擎的表修复的方式也不一样。
对于MyISAM表,如果mysqld已经宕掉,且无法启动,那么可以通过mysiamchk工具来进行修复。如果mysqld仍在运行,或者可以重新启动,那么可以通过mysqlcheck工具来进行修复。
对于InnoDB表,如果只是索引部分被损坏,那么对于二级索引的损坏,可通过OPTIMIZE TABLE 命令来修复;如果是主键索引的损坏,可通过创建一张新表,将源表数据插入新表的方式来修复。如果是数据页被损坏,可以用SELECT... INTO OUTFILE 从数据库转储表等方式来修复。
然而,我实验做失败了,我既模拟不出刚刚好损坏索引页,也模拟不出刚刚好损坏数据页,只能暴力的vim 表的ibd文件,将错就错吧。。