MySql5.0 Table错误:is marked as crashed and last (automatic?) repair failed
myisamchk -f -o ../data/database1/cms_session.MYI
最后我解决的方法是
- myisamchk -f -o ../data/database1/cms_session.MYI
以下是 网友的BLOG详细资料!
我的网🕥站出问题了【tí le】,访问一看🚎,果然全【guǒ rán quán】屏报错,检查🎾mysql日志,错误信【cuò wù xìn】息为【xī wéi】🔗:
- Table ‘.\dedecmsv4\dede_archives’ is marked as crashed and should be repaired
提示说cms的文章表【biǎo】dede_archives被标记有问题,需要修💕复〰。于是赶【yú shì gǎn】快恢复【kuài huī fù】〰历史数【lì shǐ shù】据【jù】,上网查【shàng wǎng chá】🙂找原因。最终将👣问题解🌆决。解决方🕵法如下:
找到😕mysql的安装🛄目录的【mù lù de】bin/myisamchk工具,在命令【zài mìng lìng】行中输【háng zhōng shū】⛺入:
- myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI
然后【rán hòu】myisamchk 工具会帮助你🔯恢复数🌠据表的【jù biǎo de】索引🏦。重新启动mysql,问题解决【jué】。
问题分析:
1、错误产【cuò wù chǎn】生原因,有网友【yǒu wǎng yǒu】🈶说是频🐘繁查询【fán chá xún】和更新【hé gèng xīn】dede_archives表造成的索引错误【cuò wù】,因为我💢的页面没有静态生成【tài shēng chéng】🐗,而是动态页面,因此比较同意🌶这种说法【fǎ】。还有说法为是【fǎ wéi shì】🍢MYSQL数据【jù】库🔥因为某【yīn wéi mǒu】种原因而受到了损坏【sǔn huài】🥡,如【rú】:数据【jù】库🔥服务器突发性📍的断电、在提在数据【jù】库🔥表提供服务时【fú wù shí】🧔对表的原文件【yuán wén jiàn】进行某种操作👍都有可🚠能导致MYSQL数据【jù】库🔥表被损【biǎo bèi sǔn】坏🥡而无法【fǎ】读取数【dú qǔ shù】据【jù】🚍。总之就🙏是因为某【yīn wéi mǒu】些不可测的问题造【wèn tí zào】🦔成表的损坏【sǔn huài】🥡。
问题的编号为145
2、问题解决办法。
当你试【dāng nǐ shì】图修复【tú xiū fù】一个被【yī gè bèi】🆙破坏的表的问题时,有三种👄修复类型。如果你🥧得到一个错误⛴信息指㊗出一个临时文件不能建立,删除信【shān chú xìn】息所指【xī suǒ zhǐ】出的文【chū de wén】🧙件并再试一次【shì yī cì】–这通常【zhè tōng cháng】是上一次修复操作遗留下来的。 这三种【zhè sān zhǒng】🏕修复方【xiū fù fāng】🈴法如下🕴所示🗻:
- % myisamchk –recover –quick /path/to/tblName
- % myisamchk –recover /path/to/tblName
- % myisamchk –safe-recover /path/to/tblName
第一种是【shì】🖲最快的,用来修【yòng lái xiū】🎱复最普【fù zuì pǔ】通的问【tōng de wèn】题🐣;而最后一种是【shì】🖲最慢的,用来修【yòng lái xiū】🎱复一些💌其它方【qí tā fāng】法所不能修复🙋的问题🐣。
检查和修复【fù】🔃MySQL数据文【shù jù wén】件【jiàn】🏛 如果上🤼面的方【miàn de fāng】🏊法无法修复【fù】一🖇个被损【gè bèi sǔn】💼坏的【de】表,在你放弃之前,你还可以试试下面这🚆两个技【liǎng gè jì】巧: 如果你🛐怀疑表的索引【de suǒ yǐn】⏫文件【wén jiàn】🏛(*.MYI)发生了🔌不可修复的错【fù de cuò】🐛误,甚至是丢失了👖这个文件【wén jiàn】🏛,你可以📢使用数【shǐ yòng shù】据文件【wén jiàn】🏛(*.MYD)和数据格式文📧件【jiàn】🍰(*.frm)重新生【chóng xīn shēng】🚭成它【chéng tā】。首先制作一个🚵数据文【shù jù wén】件【jiàn】🏛(tblName.MYD)的【de】拷贝。重启你【chóng qǐ nǐ】的【de】MySQL服务并【fú wù bìng】连接到这个服🈵务上,使用下【shǐ yòng xià】🔡面的【de】命令删除🍒表的【de】内👐容【róng】: mysql> DELETE FROM tblName; 在删除【zài shān chú】🌋表的【de】内👐容【róng】的【de】同时【shí】,会建立😟一个新的索引【de suǒ yǐn】⏫文件【wén jiàn】🏛。退出登🏌录并重新关闭【xīn guān bì】服务,然后用🍿你刚才【nǐ gāng cái】🍖保存的【de】数据文【shù jù wén】件【jiàn】🏛(tblName.MYD)覆盖新【fù gài xīn】🦇的【de】(空【kōng】)数据文【shù jù wén】件【jiàn】🏛。最后🎞,使用myisamchk执行标准的修【zhǔn de xiū】复【fù】🔃(上面的【shàng miàn de】第二种方法),根据表的【de】数据的【de】内容【róng】和表的【de】格式文📧件【jiàn】🍰重新生【chóng xīn shēng】🚭成索引数据。
如果你📺的表【de biǎo】🆖的格式文件【jiàn】(tblName.frm)丢失了或者是【huò zhě shì】发生了😉不可修复的错误,但是你💊清楚如【qīng chǔ rú】🚱何使用【yòng】👲相应的CREATE TABLE语句来👾重新生成这张【chéng zhè zhāng】表【biǎo】🆖,你可以【nǐ kě yǐ】☝重新生成一个【chéng yī gè】新的【xīn de】🏽.frm文件并【wén jiàn bìng】和你的🌬数据文件【jiàn】和索引文🛃件【jiàn】(如果索【rú guǒ suǒ】引文🛃件有问【jiàn yǒu wèn】题【tí】,使用【yòng】👲上面的方法重建一个新的【xīn de】🏽)一起使【yī qǐ shǐ】用【yòng】👲。首先制【shǒu xiān zhì】作一个🛥数据和👏索引文🛃件【jiàn】的拷贝【bèi】,然后删除原来的文件【jiàn】🌩(删除数🥜据目录下有关🎰这个表【biǎo】🆖的所有记录)。
启动【qǐ dòng】MySQL服务并【fú wù bìng】使用当【shǐ yòng dāng】初的CREATE TABLE文件建立一个❌新的🙃表【biǎo】。新的🙃.frm文件应🕖该可以正常工😎作了,但是最好你还是执行🦍一下标准的修💟复【fù】(上面的【shàng miàn de】第二种【dì èr zhǒng】方法🏤)。 3、myisamchk工具介【gōng jù jiè】绍(见mysql的官方🏁手册【shǒu cè】)
可以使🍪用【yòng】myisamchk实用【yòng】程序来获【xù lái huò】🎚得有关♎数据库🍱表【biǎo】🈚的信息【de xìn xī】或检查、修复【xiū fù】、优化他【yōu huà tā】们。myisamchk适用【yòng】🐰MyISAM表【biǎo】🈚(对应.MYI和.MYD文件的表【biǎo】🈚)。
调用myisamchk的方法:
shell> myisamchk [options] tbl_name … options指定你想让【xiǎng ràng】myisamchk做什么【zuò shí me】。在后面🦏描述它们【men】。还可以通过调😮用🛩myisamchk –help得到选📘项列表【xiàng liè biǎo】。
tbl_name是你想【shì nǐ xiǎng】💮要检查或修复✏的数据库表。如果你不在数据库目【jù kù mù】😾录的某处运行myisamchk,你必须指定数【zhǐ dìng shù】据库目【jù kù mù】😾录的路径,因为📷myisamchk不知道你的数🔄据库位于哪儿【yú nǎ ér】。实际上【shí jì shàng】🎞,myisamchk不在乎【bú zài hū】你正在👣操作的【cāo zuò de】文件是否位于一个数【yī gè shù】据库目【jù kù mù】😾录;你可以⚓将对应【jiāng duì yīng】于数据库表的🍲文件拷🐘贝到别【bèi dào bié】处并且【chù bìng qiě】🛹在那里执行恢【zhí háng huī】😋复操作。
如果你【rú guǒ nǐ】愿意,可以用【kě yǐ yòng】myisamchk命令行命名几个表【gè biǎo】💉。还可以【hái kě yǐ】🏗通过命名索引📴文件(用“ .MYI”后缀【hòu zhuì】)来指定一个表【gè biǎo】💉。它允许你通过使用模式💒“*.MYI”指定在【zhǐ dìng zài】一个目【yī gè mù】录所有的表💕。例如,如果你【rú guǒ nǐ】在数据【zài shù jù】🌌库目录【kù mù lù】,可以这🌧样在目🌊录下检查所有【chá suǒ yǒu】⤵的📲MyISAM表:
shell> myisamchk *.MYI 如果你♟不在数据库目🍟录下,可通过【kě tōng guò】指定到目录的📦路径检查所有【chá suǒ yǒu】💖在那里【zài nà lǐ】的表【de biǎo】:
shell> myisamchk /path/to/database_dir/*.MYI 你甚至可以通【kě yǐ tōng】过为【guò wéi】MySQL数据目🎒录的路径指定【jìng zhǐ dìng】一个通配符来🛷检查所👏有的数【yǒu de shù】🦑据库中的所有表:
shell> myisamchk /path/to/datadir/*/*.MYI 推荐的👖快速检查所有【chá suǒ yǒu】MyISAM表的方【biǎo de fāng】式是🛷:
- shell> myisamchk –silent –fast /path/to/datadir/*/*.MYI
如果你🌒想要检查所有MyISAM表并修【biǎo bìng xiū】👅复任何🥉破坏的表,可以使【kě yǐ shǐ】用下面的命令【de mìng lìng】:
- shell> myisamchk –silent –force –fast –update-state \
- -O key_buffer=64M -O sort_buffer=64M \
- -O read_buffer=1M -O write_buffer=1M \
- /path/to/datadir/*/*.MYI
该命令【gāi mìng lìng】假定你有大于👑64MB的自由内存。关于用【yòng】myisamchk分配内存的详【cún de xiáng】🕍细信息【xì xìn xī】,参见5.9.5.5节👷,“myisamchk内存使😺用【yòng】”。
当你运🈺行【háng】myisamchk时,必须确📢保其它♈程序不【chéng xù bú】使用表【shǐ yòng biǎo】📻。否则,当你运🈺行【háng】myisamchk时,会显示【huì xiǎn shì】下面的【xià miàn de】😼错误消息:
- warning: clients are using or haven’t closed the table properly
这说明你正尝【nǐ zhèng cháng】试检查正被另【zhèng bèi lìng】🔫一个还没有关【méi yǒu guān】闭文件⛏或已经终止而没有正👗确地关【què dì guān】闭文件⛏的程序(例如【lì rú】💳mysqld服务器)更新的✨表【biǎo】🎹。
如果🏨mysqld正在运行【háng】🚝,你必须通过【tōng guò】FLUSH TABLES强制清🆙空仍然🦂在内存中的任何表修改。当你运行【háng】🚝myisamchk时,必须确保其它【bǎo qí tā】程序不【chéng xù bú】🍛使用表。避免该问题的最容易【zuì róng yì】👍的方法【de fāng fǎ】🐫是使用【shì shǐ yòng】CHECK TABLE而不用😓myisamchk来检查【lái jiǎn chá】表。
关键词:MySql
阅读本文后您有什么感想? 已有 人给出评价!
- 1
- 2
- 1
- 1
- 1
- 1