飘灵儿 发表于 2015-1-16 20:12:32

绝无经由的一个mysql表索引被损坏的成绩及办理

这种服务也提供了足够的监控功能来跟踪性能和使用情况,在问题发生时将发出通知并生成一定深度的分析报告。下战书下班,惊闻我的dedecms的网站出成绩了,会见一看,公然全屏报错,反省MySQL日记,毛病信息为:
Table.dedecmsv4dede_archivesismarkedascrashedandshouldberepaired
提醒说cms的文章表dede_archives被标志有成绩,必要修复。因而从速恢复汗青数据,上彀查找缘故原由。终极将成绩办理。办理办法以下:
找到mysql的安装目次的bin/myisamchk工具,在命令行中输出:
myisamchk-c-r../data/dedecmsv4/dede_archives.MYI
然后myisamchk工具会匡助你恢单数据表的索引。从头启动mysql,成绩办理。
成绩剖析:
1、毛病发生缘故原由,有网友说是频仍查询和更新dede_archives表酿成的索引毛病,由于我的页面没有静态天生,而是静态页面,因而对照批准这类说法。另有说法为是MYSQL数据库由于某种缘故原由而遭到了破坏,如:数据库服务器突发性的断电、在提在数据库表供应服务时对表的原文件举行某种操纵都有大概招致MYSQL数据库表被破坏而没法读取数据。总之就是由于某些不成测的成绩形成表的破坏。
成绩的编号为145
2、成绩办理举措。
当你试图修复一个被损坏的表的成绩时,有三种修复范例。假如你失掉一个毛病信息指出一个一时文件不克不及创建,删除信息所指出的文件并再试一次--这一般是上一次修复操纵遗留上去的。
这三种修复办法以下所示:
%myisamchk--recover--quick/path/to/tblName
%myisamchk--recover/path/to/tblName
%myisamchk--safe-recover/path/to/tblName

第一种是最快的,用来修复最一般的成绩;而最初一种是最慢的,用来修复一些别的办法所不克不及修复的成绩。
反省和修复MySQL数据文件
假如下面的办法没法修复一个被破坏的表,在你保持之前,你还能够尝尝上面这两个技能:
假如你嫌疑表的索引文件(*.MYI)产生了不成修复的毛病,乃至是丧失了这个文件,你可使用数据文件(*.MYD)和数据格局文件(*.frm)从头天生它。起首制造一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并毗连到这个服务上,利用上面的命令删除表的内容:
mysql>DELETEFROMtblName;
在删除表的内容的同时,会创建一个新的索引文件。加入登录偏重新封闭服务,然后用你方才保留的数据文件(tblName.MYD)掩盖新的(空)数据文件。最初,利用myisamchk实行尺度的修复(下面的第二种办法),依据表的数据的内容和表的格局文件从头天生索引数据。
假如你的表的格局文件(tblName.frm)丧失了大概是产生了不成修复的毛病,可是你分明怎样利用响应的CREATETABLE语句来从头天生这张表,你能够从头天生一个新的.frm文件并和你的数据文件和索引文件(假如索引文件有成绩,利用下面的办法重修一个新的)一同利用。起首制造一个数据和索引文件的拷贝,然后删除本来的文件(删除数据目次下有关这个表的一切纪录)。
启动MySQL服务并利用现在的CREATETABLE文件创建一个新的表。新的.frm文件应当能够一般事情了,可是最好你仍是实行一下尺度的修复(下面的第二种办法)。

3、myisamchk工具先容(见mysql的官方手册)
可使用myisamchk有用程序来取得有关数据库表的信息或反省、修复、优化他们。myisamchk合用MyISAM表(对应.MYI和.MYD文件的表)。
挪用myisamchk的办法:
shell>myisamchktbl_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数据目次的路径指定一个通配符来反省一切的数据库中的一切表:
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:clientsareusingorhaventclosedthetablePRoperly
这申明你正实验反省正被另外一个还没有封闭文件或已停止而没有准确地封闭文件的程序(比方mysqld服务器)更新的表。
假如mysqld正在运转,你必需经由过程FLUSHTABLES强迫清空仍旧在内存中的任何表修正。当你运转myisamchk时,必需确保别的程序不利用表。制止该成绩的最简单的办法是利用CHECKTABLE而不必myisamchk来反省表。
你可以配置MySQL运行在微小的嵌入式应用程序中,处理的数据可能不足1Mb??而你也可以用它来处理数Tb的数据。MySQL获得这种可扩展性的路径之一是通过一个人们所熟知的存储过程,这是一个运行在程序之外的微型、预编译程序。

简单生活 发表于 2015-1-18 18:43:15

where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。

冷月葬花魂 发表于 2015-1-26 05:28:32

至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。

透明 发表于 2015-2-4 13:51:14

多走走一此相关论坛,多看一些实例开发,多交流0经验,没什么的,我也是刚学没多久!加油

若天明 发表于 2015-2-10 01:23:04

再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。

乐观 发表于 2015-2-28 14:36:13

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

再现理想 发表于 2015-3-10 00:18:40

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情

再见西城 发表于 2015-3-17 04:05:14

我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力

愤怒的大鸟 发表于 2015-3-23 18:22:04

记得在最开始使用2k的时候就要用到这个功能,可惜2k没有,现在有了作解决方案的朋友会很高兴吧。
页: [1]
查看完整版本: 绝无经由的一个mysql表索引被损坏的成绩及办理