zoukankan      html  css  js  c++  java
  • 修复mysql的表

    数据损坏原因

    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选项是正数的情况下修复数据库时,错误日志通常会有明确的提示信息。

  • 相关阅读:
    查看本机上的端口使用情况netstat -an
    WCF中的由于目标计算机积极拒绝,无法连接
    联想G480安装CentOS电缆驱动器
    "伪中国移动client"--伪基站诈骗
    Median of Two Sorted Arrays--LeetCode
    poj3671Dining Cows(DP)
    更多RANK37
    《Java并发编程实战》第二章 线程安全 札记
    Windows下一个SlikSVN使用
    (一个)AngularJS获取贴纸Hello World
  • 原文地址:https://www.cnblogs.com/matengfei123/p/7641762.html
Copyright © 2011-2022 走看看