美文网首页程序员
「Mysql索引原理(十五)」维护索引和表-修复损坏的表

「Mysql索引原理(十五)」维护索引和表-修复损坏的表

作者: 源码之路 | 来源:发表于2020-06-20 18:50 被阅读0次

修复损坏的表

       即使用正确的类型创建了表并加上了合适的索引,工作也没有结束:还需要维护表和索引来确保它们都正常工作。维护表有三个主要的目的:找到并修复损坏的表,维护准确的索引统计信息,减少碎片。

       表损坏(corruption)是很糟糕的事情。对于MyISAM存储引擎,表损坏通常是系统崩溃导致的。其他的引擎也会由于硬件问题、MySQL本身的缺陷或者操作系统的问题导致索引损坏。

       损坏的索引会导致查询返回错误的结果或者莫须有的主键冲突等问题,严重时甚至还会导致数据库的崩溃。如果你遇到了古怪的问题——例如一些不应该发生的错误——可以尝试运行CHECK TABLE来检査是否发生了表损坏(注意有些存储引擎不支持该命令;有些引擎则支持以不同的选项来控制完全检查表的方式)。CHECK TABLE通常能够找出大多数的表和索引的错误。
mysql> ALTER TABLE innodb_tbl ENGINE =INNODB

       此外,也可以使用一些存储引擎相关的离线工具,例如 myisamchk;或者将数据导出一份,然后再重新导入。不过,如果损坏的是系统区域,或者是表的“行数据”区域,而不是索引,那么上面的办法就没有用了。在这种情况下,可以从备份中恢复表,或者尝试从损坏的数据文件中尽可能地恢复数据。

       如果 Innodb引擎的表出现了损坏,那么一定是发生了严重的错误,需要立刻调查一下原因。InnoDB一般不会出现损坏。InnodB的设计保证了它并不容易被损坏。如果发生损坏,一般要么是数据库的硬件问题例如内存或者磁盘问题(有可能),要么是由于数据库管理员的错误例如在MySQL外部操作了数据文件(有可能),抑或是InnodB本身的缺陷(不太可能)。常见的类似错误通常是由于尝试使用rsync备份InnodB导致的。不存在什么査询能够让InnoDB表损坏,也不用担心暗处有“陷阱”。如果某条査询导致InnodB数据的损坏,那一定是遇到了bug,而不是查询的问题。

       如果遇到数据损坏,最重要的是找出是什么导致了损坏,而不只是简单地修复,否则很有可能还会不断地损坏。可以通过设置innodb_force_recovery参数进入InnoDB的强制恢复模式来修复数据,更多细节可以参考 MySQL手册。另外,还可以使用开源的InnoDB数据恢复工具箱( InnoDB Data Recovery Toolkit)直接从 InnoDB数据文件恢复出数据(下载地址:htp:/www.percona.com/software/mysql-innodb-data--recovery-tools/)。

相关文章

  • 「Mysql索引原理(十五)」维护索引和表-修复损坏的表

    修复损坏的表 即使用正确的类型创建了表并加上了合适的索引,工作也没有结束:还需要维护表和索引来确保它们都正常...

  • DAY7:维护索引和表

    维护表有三个主要目的:找到并修复损坏表、维护准确的索引统计数据和减少碎片。 一、找到并修复损坏的表 损坏索引会导致...

  • Mysql 相关

    MySQL索引 MySQL索引背后的数据结构及算法原理 覆盖索引和回表操作 MySQL性能优化 MySql表分区详...

  • MySQL数据库基础之索引技术及字段维护

    MySQL索引和字段修改 1、MySQL索引技术 ①、创建带索引的表 Create table表名(user)( ...

  • 避免回表与覆盖索引

    为什么要避免回表 mysql维护着两种索引树:聚集索引、非聚集索引。我们建立的索引都属于非聚集索引。通过非聚集索引...

  • 五、索引

    MySQL 索引 创建索引创建表时创建索引CREATE 在已存在的表上创建索引ALTER TABLE 在已存在的表...

  • 「Mysql索引原理(十六)」维护索引和表-更新索引统计信息

    MySQL的査询优化器会通过两个API来了解存储引擎的索引值的分布信息,以决定如何使用索引。第一个API是 ...

  • MySQL索引

    索引的优缺点 索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建...

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • Mysql 索引原理及优化

    Mysql 索引原理及优化 什么是索引 为什么需要索引? 索引是数据表种一个或者多个列进行排序的数据结构 索引能够...

网友评论

    本文标题:「Mysql索引原理(十五)」维护索引和表-修复损坏的表

    本文链接:https://www.haomeiwen.com/subject/vtygxktx.html