此文章主要向大家描述的是MySQL表索引被破坏的问题的产生缘由,以及针对这一问题我们给出其具体的解决方案,下面的文章就是对其相关内容的具体介绍,希望在你今后的学习中会有所帮助。

下午上班,惊闻我的dedecms的网站出问题了,访问一看,果然全屏报错,检查MySQL(和PHP搭配之***组合)日志,错误信息为:

Table '.\dedecmsv4\dede_archives' is marked as crashed and should be repaired

提示说cms的文章表dede_archives被标记有问题,需要修复。于是赶快恢复历史数据,上网查找原因。最终将问题解决。解决方法如下:

找到MySQL(和PHP搭配之***组合)的安装目录的bin/myisamchk工具,在命令行中输入:

myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI

然后myisamchk 工具会帮助你恢复数据表的索引。重新启动MySQL(和PHP搭配之***组合),问题解决。

MySQL表索引被破坏的问题分析:

1、MySQL表索引被破坏的错误产生原因

有网友说是频繁查询和更新dede_archives表造成的索引错误,因为我的页面没有静态生成,而是动态页面,因此比较同意这种说法。还有说法为是MySQL(和PHP搭配之***组合)数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致MySQL(和PHP搭配之***组合)数据库表被损坏而无法读取数据。总之就是因为某些不可测的问题造成表的损坏。

问题的编号为145

2、问题解决办法。

当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的。

这三种修复方法如下所示:

% myisamchk --recover --quick /path/to/tblName

% myisamchk --recover /path/to/tblName

% myisamchk --safe-recover /path/to/tblName

***种是最快的,用来修复最普通的问题;而***一种是最慢的,用来修复一些其它方法所不能修复的问题。

检查和修复MySQL(和PHP搭配之***组合)数据文件

如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:

如果你怀疑表的索引文件(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL(和PHP搭配之***组合)服务并连接到这个服务上,使用下面的命令删除表的内容:

MySQL(和PHP搭配之***组合)> DELETE FROM tblName;

在删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。***,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。

如果你的表的格式文件(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。

启动MySQL(和PHP搭配之***组合)服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常工作了,但是***你还是执行一下标准的修复(上面的第二种方法)。

3、MySQL表索引被破坏解决,myisamchk工具介绍(见MySQL(和PHP搭配之***组合)的官方手册)

可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。

调用myisamchk的方法:

shell>myisamchk [options] tbl_name ...

options指定你想让myisamchk做什么。在后面描述它们。还可以通过调用myisamchk --help得到选项列表。

tbl_name是你想要检查或修复的数据库表。如果你不在数据库目录的某处运行myisamchk,你必须指定数据库目录的路径,因为myisamchk不知道你的数据库位于哪儿。实际上,myisamchk不在乎你正在操作的文件是否位于一个数据库目录;你可以将对应于数据库表的文件拷贝到别处并且在那里执行恢复操作。

如果你愿意,可以用myisamchk命令行命名几个表。还可以通过命名索引文件(用“ .MYI”后缀)来指定一个表。它允许你通过使用模式“*.MYI”指定在一个目录所有的表。例如,如果你在数据库目录,可以这样在目录下检查所有的MyISAM表:

shell>myisamchk *.MYI

如果你不在数据库目录下,可通过指定到目录的路径检查所有在那里的表:

shell>myisamchk /path/to/database_dir/*.MYI

你甚至可以通过为MySQL(和PHP搭配之***组合)数据目录的路径指定一个通配符来检查所有的数据库中的所有表:

shell>myisamchk /path/to/datadir/*/*.MYI

推荐的快速检查所有MyISAM表的方式是:

shell>myisamchk --silent --fast /path/to/datadir/*/*.MYI

如果你想要检查所有MyISAM表并修复任何破坏的表,可以使用下面的命令:

shell>myisamchk --silent --force --fast --update-state \

-Okey_buffer=64M-Osort_buffer=64M\

-Oread_buffer=1M-Owrite_buffer=1M\

/path/to/datadir/*/*.MYI

该命令假定你有大于64MB的自由内存。关于用myisamchk分配内存的详细信息,参见5.9.5.5节,“myisamchk内存使用”。

当你运行myisamchk时,必须确保其它程序不使用表。否则,当你运行myisamchk时,会显示下面的错误消息:

warning: clients are using or haven't closed the table properly

这说明你正尝试检查正被另一个还没有关闭文件或已经终止而没有正确地关闭文件的程序(例如MySQL(和PHP搭配之***组合)d服务器)更新的表。

如果MySQL(和PHP搭配之***组合)d正在运行,你必须通过FLUSH TABLES强制清空仍然在内存中的任何表修改。当你运行myisamchk时,必须确保其它程序不使用表。避免该问题的最容易的方法是使用CHECK TABLE而不用myisamchk来检查表。

以上的相关内容就是对MySQL表索引被破坏的问题及解决的介绍,望你能有所收获。

【编辑推荐】

【责任编辑:孙巧华 TEL:(010)68476606】

点赞 0

mysql为什么要重建索引_MySQL表索引为什么会遭破坏?相关推荐

  1. mysql 破坏索引_mysql表索引被破坏的问题及解决

    用mysql的用户,经常会遇到这样的问题,检查mysql日志,错误信息为: Table '.\dedecmsv4\dede_archives' is marked as crashed and sho ...

  2. mysql repair 索引_mysql 创建索引、重建索引、查询索引、删除索引 转自:http://www.phpernote.com/mysql/942.html...

    本篇文章主要是对MySQL索引操作方法做了一下总结,包括创建索引.重建索引.查询索引.删除索引的操作.以下所列示例中中 `table_name` 表示数据表名,`index_name` 表示索引名,c ...

  3. mysql查看表索引_mysql查询表索引的命令show

    mysql中查看索引我们会用到show命令,如果有show index或者show keys之类的,下面我们一起来看看mysql查询表索引的命令show具体方法吧. MySQL查询表索引命令的有两种命 ...

  4. MYSQL查看某个数据库下所有表索引的数据量及占用空间大小

    查询某个库下所有表&索引的数据量及占用空间大小 SELECTtable_schema AS '数据库',table_name AS '表名',table_rows AS '记录数',TRUNC ...

  5. mysql添加临时索引_mysql创建索引/删除索引操作

    -- 1.ALTER 创建索引 -- table_name表名,column_list列名,index_name索引名 -- 创建index索引 ALTER TABLE table_name ADD ...

  6. mysql 普通索引和唯一索引_MySQL 普通索引和唯一索引的区别

    该文为< MySQL 实战 45 讲>的学习笔记,感谢查看,如有错误,欢迎指正 一.查询和更新上的区别 这两类索引在查询能力上是没差别的,主要考虑的是对更新性能的影响.建议尽量选择普通索引 ...

  7. mysql innerdb 索引_mysql innodb索引原理

    聚集索引(clustered index) innodb存储引擎表是索引组织表,表中数据按照主键顺序存放.其聚集索引就是按照每张表的主键顺序构造一颗B+树,其叶子结点中存放的就是整张表的行记录数据,这 ...

  8. mysql like 多个条件_MySQL高性能索引策略

    索引类型 从物理存储角度: 聚集索引 InnoDB 叶节点包含了完整的数据记录.这种索引叫做聚集索引.因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有 ...

  9. mysql单列索引和多列索引_mysql 单列索引与多列索引

    以下的文章主要介绍的是MySQL数据库索引类型,其中包括普通索引,唯一索引,主键索引与主键索引,以及对这些索引的实际应用或是创建有一个详细介绍,以下就是文章的主要内容描述. (1)普通索引 这是最基本 ...

最新文章

  1. C++中如何初始化类中const或引用类型的数据成员?
  2. 常用Redis命令总结
  3. eclipse 运行MapReduce程序错误异常汇总(解决Map not fount)
  4. 搬运机器人举杯贺所需的条件_智能搬运机器人比赛规则
  5. JS_13原型与原型链
  6. dd wipe 命令磁盘清空shell脚本,笔记本台机MAC通用
  7. WorldFirstClassOnline
  8. 汽车电子研究报告:下一个苹果产业链
  9. Java实现部标JTT1078实时音视频传输指令——视频流负载包(RTP)传输
  10. freyja 功能基本完毕
  11. 中软国际软件测试培训中心,中软国际准员工培养计划C++开发/软件测试方向开班典礼...
  12. Debian 7 安装metasploit
  13. 联想计算机系统还原怎么弄,【联想笔记本电脑一键还原的使用方法】 联想一键还原...
  14. matlab实现调整图片的饱和度
  15. 【调剂】南华大学2021硕士研究生招生调剂公告
  16. UE4资源热更打包工具HotPatcher
  17. 各种本地存储对比 cookie,localStorage,sessionStorage,indexDB以及他们和vuex的区别
  18. php 反射 thinkphp,PHP反射(ReflectionClass、ReflectionMethod)在ThinkPHP框架的控制器调度模块中的应用...
  19. 信息安全(二)——密码学
  20. mysql备份管家婆_管家婆怎么用SQL恢復以前备份的数据

热门文章

  1. 3 Django视图层
  2. 爬虫—使用Requests
  3. Spring Data JPA 梳理 - JPA是什么
  4. 前端入门14-JavaScript进阶之继承
  5. C#中英文逗号之间的相互转化
  6. Highsoft.Highcharts 5.0.6439.38401 key
  7. 使用cookies查询商品详情
  8. IAR FOR STM8 学习笔记 固件库 GPIO
  9. 企业需要安全人,看微软对员工的十个安全原则
  10. 局域网共享设置——权限问题