MySQL:Table XXX is marked as crashed and should be repaired

启动mysql的时候报错:查看日志发现表崩溃了。

wKioL1UP0aux8nMDAALS28Ne-Sw888.jpg

原因分析:由于mysql库的某些表出现了crash,所以导致报错,此时你无法创建或者删除库或者表。

比如你要drop一个库。会出现如下报错:

wKiom1UP0krxYx_sAACTrQKMopo511.jpg

解决方式:

【一】使用第三方工具修复表,如PhpMyadmin、Navicat for mysql、或者SQLyog等工具修复。

【二】使用Mysql自带的工具Mysqlcheck修复

以第二种方式为列子:

Step1:mysqlcheck -uroot -p mysql【数据库名】

wKiom1UP1GChPvbbAALFvZ8z-e4537.jpg

Step2:mysqlcheck -uroot -p mysql --auto-repair开始修复

wKiom1UP1SaxZtBxAABONa4cchk483.jpg

Step3:查看修复是否成功

wKiom1UP1WTjZMupAAJIAAbZNpg807.jpg

Ok,确定修复成功了。

你也可以用第三方工具修复。

当然啦,有时候修复就没这么顺利啦。

wKioL1UP1yjhYkp2AANg4riXtSk459.jpg

当我运行修复的时候出现了错误:提示我表不存在。

通常出现此种情况多见于数据库迁移的时候。当然也和数据库使用的存储引擎有关。我的情况属于后者,就是因为没有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关键字指定使用的存储引擎,如果省略则使用系统默认的存储引擎:

查看系统中支持的存储引擎:

wKiom1UP3s6ADPe6AAOF64_biaI459.jpg

查看某一存储引擎的具体信息:

wKioL1UQ266xzNpeAACDwcVZTXo931.jpg

wKioL1UQ28rD-RymAAQ6PGr7Jpw128.jpg


此处默认使用的是Innodb引擎,你也可以通过修改default-storage-engine=[]来修改存储引擎

最好是你在创建表的时候指定存储引擎的类型,比如你可以这样:

create table tb123 (id int, titleechar(20)) engine= INNODB;

你也可以通过alter语句修改表的存储引擎:

alter table tb123 engine = innodb;

这是针对单个表的修改,如果要修改某个数据库中所有表的存储引擎,可以先导出sql,然后修改存储引擎,最后再导入sql。


你可能感兴趣的:(数据库,mysql,修复)