数据损坏原因

MySQL表损坏一般是数据损坏,引起损坏的原因可能是由于磁盘损坏、系统崩溃或者MySQL服务器被崩溃等外部原因。例如有人使用kill -9终止进程,导致MySQL进程未能正常关闭,那么就很有可能导致数据损坏。
对于不同的引擎,数据损坏修复的方式不一样,作为一般情况可以尝试使用CHECK TABLEREPAIR TABLE命令修复。

MyISAM损坏的修复方案

MyISAM损坏有两种修复方式:

1.通过SQL修复MyISAM表:

查看表是否损坏:

mysql> CHECK TABLE t1;
+---------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------------+-------+----------+----------+
| db1.t1 | check | status | OK |
+---------------+-------+----------+----------+
1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

修复表:

mysql> repair table t1;
+---------------+--------+----------+---------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+---------------+--------+----------+---------------------------------------------------------+
| db1.t1 | repair | note | The storage engine for the table doesn't support repair |
+---------------+--------+----------+---------------------------------------------------------+
1 row in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如果单纯执行REPAIR TABLE没有起到什么效果,那么可以选择另外两个选项:
- REPAIR TABLE EXTENDED,速度比REPAIR TABLE慢得多,但是可以修复99%的错误;
- REPAIR TABLE USE_FRM,它会删除索引并利用table_name.frm文件中的描述重建索引,并通过table_name.MYD文件填充健对应的值。

2. 使用myisamchk修复MyISAM

myisamchk可以直接访问表文件,而无须启动MySQL服务器。
进入datadir文件目录,执行基本命令:

myisamchk --backup --recover t1
  • 1

其中,--backup选项是在尝试修复表之前先进行数据文件备份,还有其他使用选项就不一一介绍了。

InnoDB数据损坏修复

InnoDB是带有事务的存储引擎,并且其内部机制会自动修复大部分数据损坏错误,它会在服务器启动时进行修复。
不过,有时候数据损坏得很严重并且InnoDB无法在没有用户交互的情况下完成修复,在这种情况下,有--innodb_force_recovery启动选项。
该选项可以设置0~6(0 不强制修复 1是最低级别 6最高级别)。
如果发生损坏,可以从1开始尝试修复,直到可以启动服务器并且可以访问有问题的表为止.
启动后使用select into outfile将表转储到文件中,然后使用dropcreate命令重新创建表,最后用--innodb_force_recovery=0重新启动服务器,然后加载文件数据。
当需要在--innodb_force_recovery选项是正数的情况下修复数据库时,错误日志通常会有明确的提示信息。

修复mysql的表的更多相关文章

  1. 如何修复损坏的MySQL数据表

    id=164 由于断电或非正常关机而导致MySQL数据库出现错误是非常常见的问题.有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用M ...

  2. 阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例

    阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例 阿里云技术支持:完颜镇江 问题现象: 磁盘空间满了,第一想到的就是删除无用的服务日志或者升级数据盘. 通常是使用du –sh去分析目录 ...

  3. MySQL数据表修复, 如何修复MySQL数据库(MyISAM / InnoDB)

    常用的Mysql数据库修复方法有下面3种: 1. mysql原生SQL命令: repair 即执行REPAIR TABLE SQL语句 语法:REPAIR TABLE tablename[,table ...

  4. MySQL 数据表修复及数据恢复

    1. MYSQL数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏. 强制关机,没有先关闭mysql 服务等.   2. 数据表损坏后的主要现象是什么? 从表中选择数据之时,得到如下错误:I ...

  5. 修复mysql表

    1>用"repair table"方式修复语法:repair table 表名 [选项]选项如下:QUICK 用在数据表还没被修改的情况下,速度最快EXTENDED 试图去恢 ...

  6. mysql数据表修复

    当数据库表被破坏,运行报错: Table './database/tablename' is marked as crashed and last (automatic?) repair failed ...

  7. MYSQL数据表损坏的原因分析和修复方法小结

    MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...

  8. 用Myisamchk让MySQL数据表更健康

    用Myisamchk让MySQL数据表更健康 2011-03-15 09:15 水太深 ITPUB 字号:T | T 为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检.在这里笔者推荐 ...

  9. 详解MySQL大表优化方案( 转)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

随机推荐

  1. 【中文排序】mysql order by 中文排序

    1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的. 这种情况在MySQL的很多版本中都存在. 如果这个问题不解决,那么MySQL ...

  2. Spring3.2+mybatis3.2+Struts2.3整合配置文件大全

    0.配置文件目录 1.Spring配置 applicationContext-dao.xml <?xml version="1.0" encoding="UTF-8 ...

  3. 确定位置的经纬度LocationUtil

    package com.pingyijinren.test; import android.content.Context; import android.location.Location; imp ...

  4. [bzoj1578][Usaco2009 Feb]Stock Market 股票市场_完全背包dp

    Stock Market 股票市场 bzoj-1578 Usaco-2009 Feb 题目大意:给定一个$S\times D$的大矩阵$T$,其中$T[i][j]$表示第i支股票第j天的价格.给定初始 ...

  5. <项目><day11>查看用户浏览过的商品

    <项目>查看用户浏览过的商品 1.创建一个entity包储存实体对象 1.1创建一个Product的类存储实体对象 对象具有以下属性,并添加set和get方法,含参和不含参的构造方法,to ...

  6. 选择器(E:hover/E:active/E:focus的使用)

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta ...

  7. JSP的过滤器

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/writing-filters.html: Servlet和JSP过滤器都是Java类,可以在Servle ...

  8. 程序猿Web面试之JSON

     JSON是什么? JSON(JavaScript对象表示法), 是在网络通信下.经常使用的一种数据表达格式,它有助于我们于一个自描写叙述的,独立的和轻的方式呈现并交换数据. 这些数据能够易于和转 ...

  9. centos7grub2 引导win10

    centos7+win10安装完成之后,使用gurb2引导win10系统 方式:使用ntfs-3g 步骤: 1.加源  wget -O /etc/yum.repos.d/epel.repo http: ...

  10. 小贝_mysql 存储过程

    存储过程 简要: 1.什么是存储过程 2.使用存储过程 一.存储过程 概念类似于函数,就是把一段代码封装起来.当要行这段代码的时候,能够通过调用该存储过程来实现.在封装的语句体里面.能够用if/els ...