MySQL数据表损坏的修复方法详解

1.表损坏的原因分析

以下原因是导致mysql 表毁坏的常见原因:
1、 服务器突然断电导致数据文件损坏。
2、 强制关机,没有先关闭mysql 服务。
3、 mysqld 进程在写表时被杀掉。
4、 使用myisamchk 的同时,mysqld 也在操作表。
5、 磁盘故障。
6、 服务器死机。
7、 mysql 本身的bug 。

2.表损坏的症状

一个损坏的表的典型症状如下:
1 、当在从表中选择数据之时,你得到如下错误:
Incorrect key file for table: ‘…’. Try to repair it
2 、查询不能在表中找到行或返回不完全的数据
3 、Error: Table ‘p’ is marked as crashed and should be repaired
4 、打开表失败: Can’t open file: ‘×××.MYI’ (errno: 145)

3.修复方法

使用命令行方式登录mysql(通过MySQL安装路径下的bin中的mysql)

登陆MySql, 执行

 代码如下 复制代码

use databasename;

repair table tablename;

上面为最简单的办法了,下面我们再看一上

1. check table 和 repair table

登陆mysql 终端:

 代码如下 复制代码

mysql -uxxxxx -p dbname
> check table tabTest;

如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:

 代码如下 复制代码

> repair table tabTest;

进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。

2. myisamchk, isamchk

其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:

 代码如下 复制代码

myisamchk tablename.MYI

进行检测,如果需要修复的话,可以使用:

 代码如下 复制代码

myisamchk -of tablename.MYI

关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。

-----------------------------

另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:

 代码如下 复制代码

[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI

其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。

需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!

检测修复所有数据库(表)
mysqlcheck -A -o -r -p
---------------------------------------------------------------------------------

示例:

 代码如下 复制代码

mysql> check table tabFTPAccountInstances;

时间: 2024-10-03 19:24:36

MySQL数据表损坏的修复方法详解的相关文章

MySQL单表ibd文件恢复方法详解_Mysql

前言: 随着innodb的普及,innobackup也成为了主流备份方式.物理备份对于新建slave,全库恢复的需求都能从容应对. 但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行恢复呢? 下文将进行详细分析. 恢复过程中需要用到的工具,percona data recover tool : https://launchpad.net/percona-innodb-recovery-tool 情况一:误删部分数据,需要用最近一次备份覆盖 来自同一台机器的ibd恢复覆盖,且备份

MySQL数据备份之mysqldump的使用详解_Mysql

mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文件(转储文件)中,比如: mysqldump -uroot -p123 test > test.dump 生成的test.dump文件中包含建表语句(生成数据库结构哦)和插入数据的insert语句. B. --opt 如果加上--opt参数则生成的du

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

1.       表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时被杀掉. 4. 使用myisamchk 的同时,mysqld 也在操作表. 5. 磁盘故障. 6. 服务器死机. 7. mysql 本身的bug .   2.       表损坏的症状 一个损坏的表的典型症状如下: 1 .当在从表中选择数据之时,你得到如下错误: Incorrect key file

详解:MySQL数据表损坏的正确修复方案

修复以损坏的MySQL数据表的实际操作在实际中是我们经常用到的,以下的文章主要是介绍正确修复以损坏的MySQL数据表的实际操作步骤,以下就是正文的介绍,希望会给你带来一些帮助在此方面. 于断电或非正常关机而导致MySQL(和PHP搭配之最佳组合)数据库出 现错误是非常常见的问题.有两种方法,一种方法使用MySQL(和PHP搭配之最佳组合)的check table和repair table 的sql语句,另一种方法是使用MySQL(和PHP搭配之最佳组合)提供的多个myisamchk, isamc

MYSQL数据表损坏的原因分析和修复方法小结(推荐)_Mysql

1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时被杀掉. 4. 使用myisamchk 的同时,mysqld 也在操作表. 5. 磁盘故障. 6. 服务器死机. 7. mysql 本身的bug . 2.表损坏的症状 一个损坏的表的典型症状如下: 1 .当在从表中选择数据之时,你得到如下错误: Incorrect key file for table: '...

一次非法关机导致mysql数据表损坏的实例解决_Mysql

排查修复数据表的经过: 1.访问网页,提示错误,连接不到数据库. 2.启动mysql服务,卸载和关闭rpm安装的mysql服务 (昨天安装postfix好像yum安装了mysql),用netstat -anp |grep mysqld 命令查看mysql服务没有起来,用mysql -uroot -p也连接不到服务器. 3.查看错误提示:110726 17:02:23 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgra

MySQL创建和删除数据表的命令及语法详解_Mysql

创建数据表创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name column_type); 以下例子中我们将在 TUTORIALS 数据库中创建数据表tutorials_tbl: tutorials_tbl( tutorial_id INT NOT NULL AUTO_INCREMENT, tutorial_title VARCHAR(100) NOT NU

MySQL解决SQL注入的另类方法详解_Mysql

本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: select * from T where f1 = '{value1}' and f2 = {value2} 现在我们需要根据用户输入值填充该语句: value1=hello value2=5 我们得到了下面的 SQL 语句,我们再提交给数据库: select * from T where f1='h

Mysql建表与索引使用规范详解

本篇文章是对Mysql建表和索引使用规范进行了详细的分析介绍,需要的朋友参考下   一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. 四. MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比. 五. MySQL使用时,一条SQL语句只能使用一个表的一个索引.所有的字段