|
一、MyISAM表损坏的修复方式
1、使用 myisamchk 来修复,具体步骤:
(1)修复前将mysql服务停止。
(2)打开命令行方式,然后进入到mysql的/bin目录。
(3)执行myisamchk –recover 数据库所在路径/*.MYI。
2、使用 REPAIR TABLE 或者 OPTIMIZE table命令来修复,REPAIR TABLE table_name 修复表,OPTIMIZE TABLE table_name 优化表。
REPAIR TABLE 用于修复被破坏的表,OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)。
二、innodb表损坏的修复方式
MySQL错误日志出现:[Note] InnoDB: Discarding tablespace of table db.table: Data structure corruption,有哪些产生可能的原因及解决办法呢?
1、产生原因
从错误日志即可判断出表空间ibd文件发生了物理损坏,那么其中的可能包括如下:
(1)数据库服务器异常宕机/断电等。
(2)kill -9强制关闭mysqld。
(3)表空间导出导入过程中发生的ibd文件损坏。
(4)人为损坏ibd文件。
(5)底层物理I/O设备损坏,导致文件损坏。
2、解决办法
(1)从其他实例(如slave)上进行表空间传输进行导入或进行SQL导出导入。
(2)从历史备份中进行全量+增量恢复完整的ibd文件后再进行表空间传输或进行SQL导出导入。
(3)尝试innodb force recovery从1-6逐一尝试启动数据库,启动后通过mysqldump重新将表导出导入。
(4)考虑使用工具undrop-for-innodb从index page尝试数据恢复。
以上。 |
|