MySQL:Table XXX is marked as crashed and should be repaired
启动mysql的时候报错:查看日志发现表崩溃了。
原因分析:由于mysql库的某些表出现了crash,所以导致报错,此时你无法创建或者删除库或者表。
比如你要drop一个库。会出现如下报错:
解决方式:
【一】使用第三方工具修复表,如PhpMyadmin、Navicat for mysql、或者SQLyog等工具修复。
【二】使用Mysql自带的工具Mysqlcheck修复
以第二种方式为列子:
Step1:mysqlcheck -uroot -p mysql【数据库名】
Step2:mysqlcheck -uroot -p mysql --auto-repair开始修复
Step3:查看修复是否成功
Ok,确定修复成功了。
你也可以用第三方工具修复。
当然啦,有时候修复就没这么顺利啦。
当我运行修复的时候出现了错误:提示我表不存在。
通常出现此种情况多见于数据库迁移的时候。当然也和数据库使用的存储引擎有关。我的情况属于后者,就是因为没有cp ibdata1导致的结果,因为我的引擎为Innodb,所以在迁移数据时一定要把ibdata1文件同时迁移过去,并删除所有ib_logfile*文件。
如果使用myISAM存储引擎,myISAM存储引擎有三种类型的数据文件。
即一个table实际保存三个文件:*.frm【存放数据结构】 *.MYD【存放数据文件】 *.MYI【存放索引文件】
MyISAM是一种非事务性的引擎,提供高速存储和检索,以及全文搜索能力,适合数据仓库等查询频繁的应用。
而Innodb则是一种支持事务的引擎。所有的数据存储在一个或者多个数据文件中,支持类似于Oracle的锁机制。一般在OLTP应用中使用广泛。如果没有指定Innodb配置项,mysql将在mysql的数据目录下自动创建一个名为ibdata1的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的日志文件。创建table时可以通过engine关键字指定使用的存储引擎,如果省略则使用系统默认的存储引擎:
查看系统中支持的存储引擎:
查看某一存储引擎的具体信息:
此处默认使用的是Innodb引擎,你也可以通过修改default-storage-engine=[]来修改存储引擎
最好是你在创建表的时候指定存储引擎的类型,比如你可以这样:
create table tb123 (id int, titleechar(20)) engine= INNODB;
你也可以通过alter语句修改表的存储引擎:
alter table tb123 engine = innodb;
这是针对单个表的修改,如果要修改某个数据库中所有表的存储引擎,可以先导出sql,然后修改存储引擎,最后再导入sql。
本文出自 “Hello_World” 博客,请务必保留此出处http://coward.blog.51cto.com/7599475/1623731
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。