Myisam数据库表修复

Mysql数据库表修复:

一   这三种修复方法如下,这三种方法基本上能修复大部分的数据库表

注意使用myisamchk方法进行修复数据的时候,必须要对数据库停库或者锁表,确保数据库不会有数据写入。

  1. ##这条命令作用是根据索引文件修复数据表,不涉及数据文件 
  2. myisamchk --recover --quick /path/to/tblName 
  3. ##要是上面的命令没能修复好数据,使用这条命令去掉。 --quick ,对数据文件修改 
  4. myisamchk --recover /path/to/tblName 
  5. ##要是还不能修复数据,使用下面这条命令 
  6. myisamchk --safe-recover /path/to/tblName 
  7.   使用这条命令的时候看你回显示: can't create new temp file file_name的提然后退出,
  8. 原因是上次修复失败是创建的临时文件没有删除。强行删除给这条命令添加  --force 在执行一遍 

二 如果上述没能够修复数据库表。往往是因为索引文件已经丢失或损坏无法修复,也可能是数据库表的 .frm表结构文件丢失。这样

的话就需要更换文件了。 案列修复数据库表 t。

 

数据表t 重新生成索引文件。前提是t.frm表结构文件完好无损坏

1 进入到受损数据表所在的目录

2 把数据t.MYD 移动到另外一个安全目录

3 执行下面这条语句:

mysql > truncate table t;

4 退出mysql,将t.MYD文件拷回到原来目录覆盖刚才创建的空白数据文件。 这样会导致一个数据文件和索引不匹配的问题。但是数据库

索引文件有一个合法的结构,mysql数据库会根据数据文件和索引文件重新解释和建立索引。

5 完成上述四步骤之后,在按照一的三种方法进行数据修复

 

说明: truncate table 使用数据表格式文件t.frm重新生成数据文件和索引文件。



三 如果你的t.frm文件也受损丢失也没有备份,那么就需要你当初用的create table的语法重新创建

1 进入到数据库目录 把t.MYD t.MYI文件移动到安全另外目录

2 使用当初create table t的语法创建表结构

3 倒回t.MYD t.MYI文件到正确目录

4 按照 一 的步骤进行数据修复。




四 让Myisamchk运行更快

变量

key_buffer_size 存放索引块缓冲区长度

read_buffer_size 完成读操作缓存区长度

sort_buffer_size 完成排序缓存区长度

write_buffer_size 完成写操作缓存区长度

设置操作:

myisamchk --sort_buffer_size=16M --read_buffer_size=1m --wirte_buffer_size=1m otheor-options tab_name

修复时:sort_buffer_size适用于 --recover

key_buffer_size 适用于 --safe-recover
 

老记不住的几个命令

   
   
   
   
  1. show variables like ‘%storage_engine’; 查看正在使用的引擎 
  2. show engines;查看支持的引擎 
  3. flush privileges; 刷新权限 
  4. show create table person; 单独某个表信息 

 

五  mysiam表检查和修复,无需锁表和停掉数据库

   
   
   
   
  1. mysql> check table person;  ##检查 
  2. +-------------+-------+----------+----------+ 
  3. Table       | Op    | Msg_type | Msg_text | 
  4. +-------------+-------+----------+----------+ 
  5. | food.person | check | status   | OK       | 
  6. +-------------+-------+----------+----------+ 
  7. 1 row in set (0.00 sec) 
  8.  
  9. mysql> repair table person;    ##修复    
  10. +-------------+--------+----------+----------+ 
  11. Table       | Op     | Msg_type | Msg_text | 
  12. +-------------+--------+----------+----------+ 
  13. | food.person | repair | status   | OK       | 
  14. +-------------+--------+----------+----------+ 
  15. 1 row in set (0.00 sec) 

 

你可能感兴趣的:(mysql,myisam,表修复)