zoukankan      html  css  js  c++  java
  • 可遇不可求的Question之Fatal error encountered during command execution.

    查询MYSQL 数据库 时常出现 错误.错误信息 如下:Fatal error encountered during command execution.

    出现这种问题有可能是两种情况

    1.查询结果包含海量数据。长时间检索无响应。这种情况,需要优化SQL,尽量减少数据输出量。

    2.表结构损坏。可以通过 CHECK TABLE REPAIR TABLE 语句进行检测或修复。

    附 CHECK TABLE 语法说明

    CHECK TABLE tbl_name[,tbl_name] ... [option] ...

    option= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}

    检查一个或多个表是否有错误。CHECK TABLEMyISAMInnoDB表有作用。对于MyISAM表,关键字统计数据被更新。

    CHECK TABLE也可以检查视图是否有错误,比如在视图定义中被引用的表已不存在。

    CHECK TABLE语句会返回一个含有以下列的表:

    Table

    表名称

    Op

    进行检查

    Msg_type

    状态、错误、信息或错误之一

    Msg_text

    消息

    注意,该语句可能会为每个被检查的表产生多行信息。最后一行有一个Msg_type状态值。Msg_text通常应为OK。如果您没有得到OK

    或表已经更新了,则您通常应该运行修复后的表。请参见5.9.4节,“表维护和崩溃恢复”。表已经更新了,这意味着表的存储引擎指示没有必要检查表。

    可以给予的不同的检查选项列于下表中。这些选项只适用于检查MyISAM表。对于InnoDB表和视图,这些选项被忽略。

    类型

    意义

    QUICK

    不扫描行,不检查错误的链接。

    FAST

    只检查没有被正确关闭的表。

    CHANGED

    只检查上次检查后被更改的表,和没有被正确关闭的表。

    MEDIUM

    扫描行,以验证被删除的链接是有效的。也可以计算各行的关键字校验和,并使用计算出的校验和验证这一点。

    EXTENDED

    对每行的所有关键字进行一个全面的关键字查找。这可以确保表是100%一致的,但是花的时间较长。

    如果没有指定QUICK, MEDIUMEXTENDED选项,则对于动态格式MyISAM表,默认检查类型是MEDIUM

    这与对表运行myisamchk --medium-checktbl_name的结果相同。对于静态格式MyISAM表,默认检查类型也是MEDIUM

    除非CHANGEDFAST已被指定。在此情况下,默认值为QUICK。对于CHANGEDFAST,行扫描被跳过,因为行极少被破坏。

    您可以组合检查选项,如下面的例子所示。该例子对表进行了一个快速检查,来查看该表是否被正确关闭:

    CHECK TABLE test_table FAST QUICK;

    注释:在有些情况下,CHECK TABLE会更改表。如果表被标记为“corrupted”或“not closed properly”,则出现这种情况。

    但是CHECK TABLE不会找出表中的问题。在这种情况下,CHECK TABLE会把表标记为良好。

    如果一个表被破坏,很有可能问题在索引中,而不在数据部分中。所有前述的检查类型都可以彻底地检查索引,因此,可以找出多数的错误。

    如果您只想要检查您假定的表是良好的,您应该不使用检查选项或QUICK选项。当您时间匆忙时,应使用QUICK

    QUICK无法找出数据文件中的错误的风险非常小。(在多数情况下,在正常使用中,MySQL应能在数据文件中找出错误。

    如果找出了错误,表被标记为“corrupted”,并不能被使用,直到修复为止。)

    如果您想要时常检查表,FASTCHANGED多数情况下从原本中被使用(例如,从cron中被执行)。在多数情况下,FAST优先于CHANGED

    (只有一种情况FAST不优先于CHANGED,那就是当您怀疑您在MyISAM代码中发现了错误。)

    MySQL试图通过关键字更新一行或查找一行时,如果您已经运行了一个常规检查后但仍得到来自表的奇怪的错误,此时使用EXTENDED

    (如果常规的检查运行成功,则基本用不着EXTENDED。)

    CHECK TABLE报告的部分问题不会被自动修正:

    ?        发现行。此行中,auto_increment列有0值。

    这意味着,您在表中有一行,该行的AUTO_INCREMENT索引列包含0值。(可以通过使用UPDATE语句,明确地把列设置为0

    以创建一个AUTO_INCREMENT列为0的行。)

    这本身不是一个错误,但是如果您决定转储表并恢复表,或对表进行ALTER TABLE,那么会导致出现麻烦。在此情况下,

    AUTO_INCREMENT列会根据AUTO_INCREMENT列的结果更改值,这会导致出现问题,如重复关键字错误等。

    要消除警告,只需执行一个UPDATE语句,把列设置为除0以外的值。

  • 相关阅读:
    Linux环境下安装JDK
    CentOS 7 更改主机名
    Find Pivot Index之Python实现
    MySQL基本操作之数据库基本操作
    Linux环境下安装单实例MySQL 5.7
    基于时间的ACL配置
    动态ACL的配置
    自反ACL
    OSFPv3的配置
    RIPng 配置
  • 原文地址:https://www.cnblogs.com/tigerjacky/p/1816991.html
Copyright © 2011-2022 走看看