问题表现:由于服务器崩溃导致表损坏无法打开或者能打开但是无法写入数据(提示主键重复但实际没有该主键且该主键值在最大值范围内)。

本文提供两种检查修复方式:mysqlcheck 和 myisamchk ,均在MySQL安装目录bin文件夹下。

一、MysqlCheck 和 Myisamchk 的区别

  mysqlcheck 和 myisamchk 程序主要用于检查和修复数据表(主要是 MyISAM 表),比如由于服务器崩溃导致的 MyISAM 表损坏。以下是两者的比较:

  1、两者均能检测、修复、分析 MyISAM 类型表。 mysqlcheck 还能优化 MyISAM 表,同时还能检测 InnoDB 类型表,分析 BDB 表。但有些操作是 mysqlcheck 不能匹敌的,比如,myisamchk 可以启动和禁止索引。

  2、二者在使用上有着很大的区别。mysqlcheck 是一个客户端程序,可通过网络连接到服务器。他提供了一个可对接服务器表维护指令的命令行接口,比如 CHECK TABLE 和 REPAIR TABLE。mysqlcheck会依据命令行上输入的指令,发送对应的SQL描述到服务器,供服务器执行。这就意味着服务器必须是处于启动运行状态,同时也意味着你能够通过 mysqlcheck 连接到远程服务器。相反, myisamchk 不是客户端程序,他是一个直接操作 MyISAM 物理表的通用工具。这就意味着你必须在 MyISAM 表文件所在的服务器上使用这个工具。同时,当你检测表时需要有文件读取权限,当修复表时需要有写入权限。

  3、两者在运行时,与服务器的关系也大不相同。使用 mysqlcheck 时,你仍可以和服务器进行交互。因为 mysqlcheck 是要求服务器自己去进行表的检测和修复。使用 myisamchk 时,你需要确保服务器并没有打开目标表且目标表没有被其他人使用中。如果myisamchk和mysql server同时对表操作,可能导致表被损坏。因此,为了避免这种情况的发生,在使用 myisamchk 时应停掉MySQL服务。 myisamchk 在检测修复表的过程中可能会锁定表文件。

二、MysqlCheck 使用简介

1、远程检测表,如图(表正常):

2、服务器端使用 mysqlcheck 时则不需要指定远程服务器地址,如图(表存在问题):

指令说明:

-c 检查操作,后边跟数据库名称 [表名]

-h 主机地址

-P 端口号

-u 用户名

-p 密码

注意:

  1)如果提示 “mysqlcheck: [ERROR] unknown option '--no-beep'” ,则需要修改MySQL配置文件,将 [client] 下的 no-beep 注释掉(注释符号 #)

  2)命令使用过程中需要输入用户凭证,如果服务器端存在多个实例,还需要指定实例端口号。

3、使用 mysqlcheck 修复表,如下图:

mysqlcheck 不能修复唯一键不唯一的错误...

指令说明:

-r 数据修复.Perform a repair that can fix almost anything except unique keys that are not unique.

更多相关操作,看这里

三、Myisamchk 使用简介

  如第一部分,该工具只能在服务器端使用,且需要关闭MySQL服务。

使用 Myisamchk 修复数据,需要进入到MySQL物理库对应的文件夹,然后执行修复指令,如下图:

  指令说明:

    -r 数据恢复。If you have lots of memory, you should increase the value of myisam_sort_buffer_size.

  注意:

     第一次运行时, 抛出 “myisamchk: error: myisam_sort_buffer_size is too small” 错误,此时只需要在指令后面追加 --sort_buffer_size=2G(根据需要)即可。

更多相关操作,看这里

四、使用后感

  myisamchk 修复数据时简单粗暴,感觉效率更快一下(感觉,没证据...)

  上边的两种方法均已验证,修复了我的三张表。

  表错误的表现1:[Err] 1062 - Duplicate entry '31729205' for key 'PRIMARY' 主键为自增(int类型),插入的主键数据在原表中不存在。

  表错误的表现2:*** marked crashed...

  表错误的表现3:查看表对象信息时,表的基本信息表述为空

问题解决,结贴。没有更深入的研究了解,欢迎评论交流~

参考:

1.How to Check and Repair MySQL Tables Using Mysqlcheck

2.MySQL Table is marked as crashed and last (automatic?) repair failed

3.Using MySQL Client Programs

4.myisamchk修复损坏的MySQL数据库方法

5.mysqlcheck — A Table Maintenance Program

6.myisamchk — MyISAM Table-Maintenance Utility

'Table is Marked as crashed and should be repaired Error'.Mysql表损坏解决方案的更多相关文章

  1. linux Table is marked as crashed and should be repaired

    linux Table is marked as crashed and should be repaired 2014-07-28 10:34 1282人阅读 评论(0) 收藏 举报  分类: da ...

  2. mysql 错误:Table is marked as crashed and should be repaired 解决办法

    遇到这个问题几个敲命令轻松搞定 1.首先进入mysql命令台: mysql -u root -p 回车 输入密码 2.查询所有的库 mysql> show databases; 3.进入数据库“ ...

  3. Table is marked as crashed and should be repaired 解决办法

    遇到这个问题几个敲命令轻松搞定 1.首先进入mysql命令台: mysql -u root -p 回车  输入密码 2.查询所有的库 mysql> show databases; 3.进入数据库 ...

  4. Table '' is marked as crashed and should be repaired 解决方法

    解决方法: 找到mysql的安装目录的bin/myisamchk工具,在命令行中输入: myisamchk -c -r ../data/mysql/user.MYI 然后myisamchk 工具会帮助 ...

  5. 解决 MySQL 的 Table is marked as crashed and should be repaired 问题

    解决方法: 找到mysql的安装目录的bin/myisamchk工具,在命令行中输入: myisamchk -c -r ../data/mysql/user.MYI 然后myisamchk 工具会帮助 ...

  6. azkaban-web-start.sh启动时出现Table 'execution_flows' is marked as crashed and should be repaired Query错误的解决办法(图文详解)

    问题详情 [hadoop@master bin]$ ./azkaban-web-start.sh Using Hadoop Using Hive from /home/hadoop/app/hive ...

  7. 【MySQL Errors】Table 'xxx' is marked as crashed and should be repaired 的解决方案

    现象描述 访问 Zabbix Web,出现如下错误提示: • Error in query [SELECT * FROM history_uint h WHERE h.itemid='25067' O ...

  8. mysq l错误Table ‘./mysql/proc’ is marked as crashed and should be repaired

    续上一篇,解决了上一篇中的问题后,启动成功,但是在数据库中操作会存在一些问题,一些操作报一下异常: Table './mysql/proc' is marked as crashed and shou ...

  9. 解决mysql Table ‘xxx’ is marked as crashed and should be repaired的问题。

    解决mysql Table 'xxx' is marked as crashed and should be repaired的问题. 某个表在进行数据插入和更新时突然出现Table 'xxx' is ...

随机推荐

  1. 配置jenkins slave 问题,ERROR: Couldn't find any revision to build. Verify the repository and branch configuration for this job.

    因为需要需要搭建一套自动化环境的windows电脑作为slave,简单的把原来用来mac上的job配置一模一样的配置了下,运行时遇到如上问题,google半天百思不得其解, 后来尝试把SCM里面的br ...

  2. 存储树形的数据表转为Json

    /// <summary> /// 根据DataTable生成Json树结构 /// </summary> /// <param name="tabel&quo ...

  3. 源码速读及点睛:HashMap

    Java 8 HashMap的分离链表 从Java 2到Java 1.7,HashMap在分离链表上的改变并不多,他们的算法基本上是相同的.如果我们假设对象的Hash值服从平均分布,那么获取一个对象需 ...

  4. 如何使用 Telegram

    Telegram是一款加密的实时通讯软件,本文告诉大家如何使用 这个软件. 在使用之前,需要保证自己已经开了梯子,如果没有梯子,那么就无法使用这个工具. 假如梯子是 127.0.0.1 端口 1080 ...

  5. HTML5的audio在手机网页上无法自动加载/播放音乐,能否实现该功能?

    在IOS中第一次调用play方法播放音频会被阻止,必须得等用户有交互动作,比如touchstart,click后才能正常调用,在微信中可以通过监听WeixinJSBridgeReady事件来提前播放一 ...

  6. 前端模块化(AMD和CMD、CommonJs)

    知识点1:AMD/CMD/CommonJs是JS模块化开发的标准,目前对应的实现是RequireJs/SeaJs/nodeJs. 知识点2:CommonJs主要针对服务端,AMD/CMD主要针对浏览器 ...

  7. Mybatis中的jdbcType的作用

    使用MyBatis框架做更新操作时,在该字段需要更新的内容为空时,就会出现1111错误,也就是无效的列类型,这个时候你就要使用jdbcType.至于什么时候要使用到javaType我还没遇到过,而且我 ...

  8. python数据类型之字典

    字典定义 字典是一种 key-value 的数据类型,这点很重要,是区别使用列表和字典的依据. 语法格式: info = { 'stu1101': "Aaron", 'stu110 ...

  9. Linux : task work 机制

    task work机制可以在内核中向指定的进程添加一些任务函数,这些任务函数会在进程返回用户态时执行,使用的是该进程的上下文.包括下面的这些API: task_work_add task_work_c ...

  10. iOS中表视图单元格事件用nib和storyboard的两种写法总结

    从ios6开始,苹果公司推出了storyborad技术取代了nib的写法,这样代码量确实少写了很多,也比较简洁.但是,从学习的角度来说,阿堂认为 用nib的写法,虽然多了些代码,但是对于掌握知识和原理 ...