修复mysql的表
数据损坏原因
MySQL表损坏一般是数据损坏,引起损坏的原因可能是由于磁盘损坏、系统崩溃或者MySQL服务器被崩溃等外部原因。例如有人使用kill -9
终止进程,导致MySQL进程未能正常关闭,那么就很有可能导致数据损坏。
对于不同的引擎,数据损坏修复的方式不一样,作为一般情况可以尝试使用CHECK TABLE
和REPAIR 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
将表转储到文件中,然后使用drop
和create
命令重新创建表,最后用--innodb_force_recovery=0
重新启动服务器,然后加载文件数据。
当需要在--innodb_force_recovery
选项是正数的情况下修复数据库时,错误日志通常会有明确的提示信息。
修复mysql的表的更多相关文章
- 如何修复损坏的MySQL数据表
id=164 由于断电或非正常关机而导致MySQL数据库出现错误是非常常见的问题.有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用M ...
- 阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例
阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例 阿里云技术支持:完颜镇江 问题现象: 磁盘空间满了,第一想到的就是删除无用的服务日志或者升级数据盘. 通常是使用du –sh去分析目录 ...
- MySQL数据表修复, 如何修复MySQL数据库(MyISAM / InnoDB)
常用的Mysql数据库修复方法有下面3种: 1. mysql原生SQL命令: repair 即执行REPAIR TABLE SQL语句 语法:REPAIR TABLE tablename[,table ...
- MySQL 数据表修复及数据恢复
1. MYSQL数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏. 强制关机,没有先关闭mysql 服务等. 2. 数据表损坏后的主要现象是什么? 从表中选择数据之时,得到如下错误:I ...
- 修复mysql表
1>用"repair table"方式修复语法:repair table 表名 [选项]选项如下:QUICK 用在数据表还没被修改的情况下,速度最快EXTENDED 试图去恢 ...
- mysql数据表修复
当数据库表被破坏,运行报错: Table './database/tablename' is marked as crashed and last (automatic?) repair failed ...
- MYSQL数据表损坏的原因分析和修复方法小结
MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...
- 用Myisamchk让MySQL数据表更健康
用Myisamchk让MySQL数据表更健康 2011-03-15 09:15 水太深 ITPUB 字号:T | T 为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检.在这里笔者推荐 ...
- 详解MySQL大表优化方案( 转)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
随机推荐
- 【NOIP2017练习】论战大原题(并查集)
题意:给定一个n个点m条边的无向图.定义一条路径的长度为路径上最小边的权值. 定义dist(i,j)为起点为i,终点为j的长度最长的路径的长度.求出第k大的dist(i,j)(i<j). 对于所 ...
- n个点中求任意两点组成斜率的最大值
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1100 首先按x坐标排序,然后相邻的三个点A,B,C 组成的三条直线必然有 ...
- 博弈论入门题 kiki's game
Problem Description Recently kiki has nothing to do. While she is bored, an idea appears in his mind ...
- Free Goodies UVA - 12260
Petra and Jan have just received a box full of free goodies, and want to divide the goodies between ...
- Layui动画、按钮、表单
Layui动画.按钮.表单 在实用价值的前提之下,我们并没有内置过多花俏的动画.而他们同样在 layui 的许多交互元素中,发挥着重要的作用.layui 的动画全部采用 CSS3,因此不支持ie8和部 ...
- Java电商项目-5.内容管理cms系统
目录 实现加载内容分类树功能 实现内容分类动态添加 删除内容分类节点 实现内容分类节点的分页显示 实现广告内容的添加 实现广告内容删除 实现广告内容编辑 到Github获取源码请点击此处 实现加载内容 ...
- JDBC基础教程:tutorialspoint-jdbc
来自turorialspoint的JDBC基础教程(英文),官网:https://www.tutorialspoint.com/jdbc/index.htm 这个教程在国内已经被翻译成中文(不过是属于 ...
- Android GIS开发系列-- 入门季(15) 网络图层加载
一.首先我们来看一个网络图层: http://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer,这是全 ...
- linux程序命令行选项的3种风格:unix、gnu、x toolkit
In Unix-like systems, the ASCII hyphen-minus is commonly used to specify options. The character is u ...
- POJ3977 Subset 折半枚举
题目大意是给定N个数的集合,从这个集合中找到一个非空子集,使得该子集元素和的绝对值最小.假设有多个答案,输出元素个数最少的那个. N最多为35,假设直接枚举显然是不行的. 可是假设我们将这些数分成两半 ...