山那边是海 发表于 2015-1-16 22:16:29

MYSQL网页编程之Can’t open file:[Table]mytable.MYI

如果你在一个遵循GPL的自由(开源)项目中使用MySQL,那么你可以遵循GPL协议使用MySQL。然而,如果你的项目不是在GPL协议下的话,你必须为使用MySQL来支付许可费用,或者你可能因为这个因素而将你的项目改为遵循GPL。</p>大概良多人碰到过相似Can’topenfile:‘mytable.MYI’如许的毛病信息,却不晓得怎样办理他,上面我们做个先容,
多半情形下,数据库被损坏只是指索引文件遭到了损坏,真实的数据被损坏失落的情形十分少。年夜多半情势的数据库损坏的的修复相称复杂。
和后面的校验一样,修复的体例也有三种。
上面讲的办法只对MyISAM格局的表无效。其他范例的破坏必要从备份中恢复。
1,REPAIRTABLESQLstatement(mysql服务必需处于运转形态)。
2,命令mysqlcheck(mysql服务能够处于运转形态)。
3,命令myisamchk(必需停失落mysql服务,大概所操纵的表处于不举动形态)。
在修复表的时分,最好先作一下备份。以是你必要两倍于原始表巨细的硬盘空间。请确保在举行修复前你的硬盘空间还没有效完。
1>用”repairtable”体例修复
语法:repairtable表名[选项]
选项以下:
QUICK用在数据表还没被修正的情形下,速率最快
EXTENDED试图往恢复每一个数据行,会发生一些渣滓数据行,万般无法的情形下用
USE_FRM用在.MYI文件丧失大概头部遭到损坏的情形下。使用.frm的界说来重修索引
多半情形下,复杂得用”repairtabletablename”不加选项就能够弄定成绩。可是当.MYI文件丧失大概头部遭到损坏时,如许的体例不论用,比方:
mysql>REPAIRTABLEmytable;
+————————-+——&ndash;+———-+———————————————+
TableOpMsg_typeMsg_text
+————————-+——&ndash;+———-+———————————————+
sports_results.mytablerepairerrorCan’tfindfile:‘mytable.MYI’(errno:2)
+————————-+——&ndash;+———-+———————————————+修复失利的缘故原由时索引文件丧失大概其头部遭到了损坏,为了使用相干界说文件来修复,必要用USE_FRM选项。比方:
mysql>REPAIRTABLEmytableUSE_FRM;
+————————-+——&ndash;+———-+————————————+
TableOpMsg_typeMsg_text
+————————-+——&ndash;+———-+————————————+
sports_results.mytablerepairwarningNumberofrowschangedfrom0to2
sports_results.mytablerepairstatusOK
+————————-+——&ndash;+———-+————————————+我们能够看到Msg_test表项的输入信息”ok”,表名已乐成修复受损表。
2>用mysql内建命令mysqlcheck来修复
当mysql服务在运转时,也能够用mysql内建命令mysqlcheck来修复。
语法:mysqlcheck-r数据库名表名-uuser-ppass
%mysqlcheck-rsports_resultsmytable-uuser-ppass
sports_results.mytableOK使用mysqlcheck能够一次性修复多个表。只需在数据库名后列出响应表名便可(用空格离隔)。大概数据库名后不加表名,将会修单数据库中的一切表,比方:
%mysqlcheck-rsports_resultsmytableevents-uuser-ppass
sports_results.mytableOK
sports_results.eventsOK

%mysqlcheck-rsports_results-uuser-ppass
sports_results.mytableOK
sports_results.eventsOK3>用myisamchk修复
用这类体例时,mysql服务必需停失落,大概所操纵的表处于不举动形态(选项skip-external-locking没被利用)。记住必定要在相干.MYI文件的路径下大概本人界说其路径。
语法:myisamchk[选项][表名]
上面是其选项和形貌
&ndash;backup,-B在举行修复前作相干表得备份
&ndash;correct-checksum改正校验和
&ndash;data-file-length=#,-D#重修表时,指定命据文件得最年夜长度
&ndash;extend-check,-e试图往恢复每一个数据行,会发生一些渣滓数据行,万般无法的情形下用
&ndash;force,-f当碰到文件名不异的.TMD文件时,将其掩盖失落。
keys-used=#,-k#指定所用的keys可加速处置速率,每一个二进制位代表一个key.第一个key为0
&ndash;recover,-r最经常使用的选项,年夜多半损坏都能够经由过程它来修复。假如你的内存充足年夜,能够增年夜参数sort_buffer_size的值来加速恢复的速率。可是碰到独一键因为损坏而不惟一的表时,这类体例不论用。
&ndash;safe-recover-o最完全的修复体例,可是比-r体例慢,一样平常在-r修复失利后才利用。这类体例读出一切的行,并以举动基本来重修索引。它的硬盘空间需求比-r体例略微小一点,因为它没创立分类缓存。你能够增添key_buffer_size的值来加速修复的速率。
&ndash;sort-recover,-nmysql用它类分类索引,只管了局是一时文件会十分年夜
&ndash;character-sets-dir=…包括字符集设置的目次
&ndash;set-character-set=name为索引界说一个新的字符集
&ndash;tmpdir=path,-t假如你不想用情况变量TMPDIR的值的话,能够自界说一时文件的寄存地位
&ndash;quick,-q最快的修复体例,当数据文件没有被修正时用,当存在多键时,第二个-q将会修正数据文件
&ndash;unpack,-u解开被myisampack打包的文件
myisamchk使用的一个例子
%myisamchk-rmytable
-recovering(withkeycache)MyISAM-table‘mytable.MYI’
Datarecords:0
怀疑这些功能在MySQL5.0中的成熟性。充其量它们在MySQL中被支持的时间也就一年左右,而在MySQL学习教程其他关系型数据库中则已经存在了近10年的时间。

小妖女 发表于 2015-1-19 06:30:41

学习SQL语言的话如果要学会去做网站就不是很难!但是要做数据库管理的话就有难度了!

灵魂腐蚀 发表于 2015-1-28 05:20:46

而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。

飘灵儿 发表于 2015-2-13 02:28:47

还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。

老尸 发表于 2015-3-3 13:10:11

总感觉自己还是不会SQL

爱飞 发表于 2015-3-11 11:21:44

我个人认为就是孜孜不懈的学习

深爱那片海 发表于 2015-3-18 14:43:08

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!

谁可相欹 发表于 2015-3-26 06:41:33

还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。
页: [1]
查看完整版本: MYSQL网页编程之Can’t open file:[Table]mytable.MYI