精华内容
下载资源
问答
  • MySQL修复表的三种方法
    千次阅读
    2021-01-19 13:59:05

    也许很多人遇到过类Can’topenfile:‘[Table]mytable.MYI’这样的错误信息,却不知道怎么解决他,下面我们做个介绍, 多数情况下,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少。大多数形式的数据库破坏的的修复相当简单。 和前面的校

    也许很多人遇到过类似Can’t open file: ‘[Table]mytable.MYI’ 这样的错误信息,却不知道怎么解决他,下面我们做个介绍,

    多数情况下,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少。大多数形式的数据库破坏的的修复相当简单。

    和前面的校验一样,修复的方式也有三种。

    下面讲的方法只对MyISAM格式的表有效。其他类型的损坏需要从备份中恢复。

    1,REPAIR TABLE SQL statement(mysql服务必须处于运行状态)。

    2,命令mysqlcheck(mysql服务可以处于运行状态)。

    3,命令myisamchk(必须停掉mysql服务,或者所操作的表处于不活动状态)。

    在修复表的时候,最好先作一下备份。所以你需要两倍于原始表大小的硬盘空间。请确保在进行修复前你的硬盘空间还没有用完。

    1、用”repair table”方式修复

    语法:repair table 表名 [选项]

    选项如下:

    QUICK 用在数据表还没被修改的情况下,速度最快

    EXTENDED 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用

    USE_FRM 用在.MYI文件丢失或者头部受到破坏的情况下。利用.frm的定义来重建索引

    多数情况下,简单得用”repair table tablename”不加选项就可以搞定问题。但是当.MYI文件丢失或者头部受到破坏时,这样的方式不管用,

    例如:

    mysql> REPAIR TABLE mytable;

    修复失败的原因时索引文件丢失或者其头部遭到了破坏,为了利用相关定义文件来修复,需要用USE_FRM选项。例如:

    mysql> REPAIR TABLE mytable USE_FRM;

    我们可以看到Msg_test表项的输出信息”ok”,表名已经成功修复受损表。

    http://bbs.landingbj.com/t-0-250391-1.html

    本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

    本文系统来源:php中文网

    更多相关内容
  • 网站运行中mysql的数据难免会出现类似"is marked as crashed and should be repaired"的错误,我们可以用下面这个命令修复
  • 随着mysql的长期使用,肯定会出现一些问题,一般情况下mysql表无法访问,就可以修复表了,优化时减少磁盘占用空间。方便备份。
  • mysql命令修复数据库

    千次阅读 2021-01-25 12:08:52
    mysql命令修复数据库REPAIR TABLE `table_name` 修复表 (只对MyISAM引擎有效)OPTIMIZE TABLE `table_name` 优化REPAIR TABLE 用于修复被破坏的。OPTIMIZE TABLE 用于回收闲置的数据库空间,当上的数据行被...

    mysql命令修复数据库表

    REPAIR TABLE `table_name` 修复表  (只对MyISAM引擎有效)

    OPTIMIZE TABLE `table_name` 优化表

    REPAIR TABLE 用于修复被破坏的表。

    OPTIMIZE TABLE 用于回收闲置的数据库空间,当表上的数据行被删除时,所占据的磁盘空间并没有立即被回收,使用了OPTIMIZE TABLE命令后这些空间将被回收,并且对磁盘上的数据行进行重排(注意:是磁盘上,而非数据库)。

    多数时间并不需要运行OPTIMIZE TABLE,只需在批量删除数据行之后,或定期(每周一次或每月一次)进行一次数据表优化操作即可,只对那些特定的表运行。

    一般来说,数据库被破坏只是指索引文件受到了破坏,真正的数据被破坏掉的情况非常少。大多数形式的数据库破坏的的修复相当简单。

    下面的方法只对MyISAM格式的表有效。其他类型的损坏需要从备份中恢复。

    1,REPAIR TABLE SQL statement (mysql服务必须处于运行状态)。

    2,命令mysqlcheck (mysql服务可以处于运行状态)。

    3,命令myisamchk (必须停掉mysql服务,或者所操作的表处于不活动状态)。

    在修复表的时候,最好先作一下备份(此时一般用mysqldump已经无法备份了,把整个data目录复制出来吧),所以你需要两倍于原始表大小的硬盘空间。请确保在进行修复前你的硬盘空间还没有用完。

    1>用”repair table”方式修复

    语法:repair table 表名 [选项]

    选项如下:

    QUICK 用在数据表还没被修改的情况下,速度最快

    EXTENDED 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用

    USE_FRM 用在.MYI文件丢失或者头部受到破坏的情况下。利用.frm的定义来重建索引

    多数情况下,简单得用”repair table tablename”不加选项就可以搞定问题。但是当.MYI文件丢失或者头部受到破坏时,这样的方式不管用,这时索引文件丢失或者其头部遭到了破坏,为了利用相关定义文件来修复,需要用USE_FRM选项。

    2>用mysql内建命令mysqlcheck来修复

    当mysql服务在运行时,也可以用mysql内建命令mysqlcheck来修复。

    语法:mysqlcheck -r 数据库名 表名 -uuser -ppass

    mysqlcheck -r sports_results mytable -uuser -ppass

    sports_results.mytable OK

    利用mysqlcheck可以一次性修复多个表。只要在数据库名后列出相应表名即可(用空格隔开)。或者数据库名后不加表名,将会修复数据库中的所有表,例如:

    mysqlcheck -r sports_results mytable events -uuser -ppass

    sports_results.mytable OK

    sports_results.events OK

    mysqlcheck -r sports_results -uuser -ppass

    sports_results.mytable OK

    sports_results.events OK

    3>用myisamchk修复

    用这种方式时,mysql服务必须停掉,或者所操作的表处于不活动状态(选项skip-external-locking没被使用)。记着一定要在相关.MYI文件的路径下或者自己定义其路径。

    语法:myisamchk [选项] [表名]

    下面是其选项和描述

    –backup, -B 在进行修复前作相关表得备份

    –correct-checksum 纠正校验和

    –data-file-length=#, -D # 重建表时,指定数据文件得最大长度

    –extend-check, -e 试图去恢复每个数据行,会产生一些垃圾数据行,万般无奈的情况下用

    –force, -f 当遇到文件名相同的.TMD文件时,将其覆盖掉。

    keys-used=#, -k # 指定所用的keys可加快处理速度,每个二进制位代表一个key.第一个key为0

    –recover, -r 最常用的选项,大多数破坏都可以通过它来修复。如果你的内存足够大,可以增大参数sort_buffer_size的值来加快恢复的速度。但是遇到唯一键由于破坏而不唯一 的表时,这种方式不管用。

    –safe-recover -o 最彻底的修复方式,但是比-r方式慢,一般在-r修复失败后才使用。这种方式读出 所有的行,并以行为基础来重建索引。它的硬盘空间需求比-r方式稍微小一点,因 为它没创建分类缓存。你可以增加key_buffer_size的值来加快修复的速度。

    –sort-recover, -n mysql用它类分类索引,尽管结果是临时文件会非常大

    –character-sets-dir=… 包含字符集设置的目录

    –set-character-set=name 为索引定义一个新的字符集

    –tmpdir=path, -t 如果你不想用环境变量TMPDIR的值的话,可以自定义临时文件的存放位置

    –quick, -q 最快的修复方式,当数据文件没有被修改时用,当存在多键时,第二个-q将会修改 数据文件

    –unpack, -u 解开被myisampack打包的文件

    myisamchk应用的一个例子:

    myisamchk -r mytable

    - recovering (with keycache) MyISAM-table ‘mytable.MYI’

    Data records: 0相关阅读:

    正则表达式从句子中找出包含或不包含某单词

    PHP加密解密函数,手册上的

    PHP完美截取HTML标签不错位

    PHP GBK,PHP输出GBK所有汉字

    php汉字正则表达式,utf8编码和gbk编码

    PHP创建桌面快捷方式

    PHP5.4中关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题

    PHP5.3.8安装配置 at WIN2003+IIS6

    展开全文
  • 断电或非正常关机可能导致MySQL数据库出现损坏,特别是MyISAM数据很大的时候。有三种方法,一种方法使用MySQL的repair table的sql语句,另一种方法是使用MySQL提供的myisamchk,,最后一种是mysqlcheck命令行工具...

    断电或非正常关机可能导致MySQL数据库出现表损坏,特别是MyISAM表数据很大的时候。有三种方法,一种方法使用MySQL的repair table的sql语句,另一种方法是使用MySQL提供的myisamchk,,最后一种是mysqlcheck命令行工具。

    1.repair table(建议方法,对MyISAM引擎表有用)

    (1)check table tabTest;

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

    (2)repair table tabTest;

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

    2. myisamchk(该工具必须运行在服务终止条件下,对MyISAM引擎表有用)。

    (1)myisamchk tablename.MYI

    进行检测。

    (2)myisamchk -of tablename.MYI

    网上说的其它方法:

    那么修复test表的方法为

    myisamchk -r -q /var/lib/mysql/db/test.MYI

    如果修复全部表,用这个命令

    myisamchk -r -q /var/lib/mysql/db/*.MYI

    3.运行mysqlcheck命令行工具(该工具可以在服务运行状态下执行)

    检查特定的表:

    如果应用中提示某个表坏了,使用下面的命令来检查。

    $ mysqlcheck -c newmandela order -uroot -p

    Enter password:

    newmandela.order                                   OK

    newmandela 是库名, order是表名,还需要输入用户名和密码

    检查一个库中的所有表:

    $ mysqlcheck -c newmandela -uroot -p

    Enter password:

    newmandela.account                                 OK

    newmandela.alarm                                   OK

    newmandela.alarm_settings                          OK

    newmandela.auth_group                              OK

    newmandela.auth_group_permissions                  OK

    newmandela.auth_permission                         OK

    检查所有库中的所有表:

    全部的库和表都检查一遍了。

    $mysqlcheck -c --all-databases -uroot -p

    Enter password:

    apmonitor.acinfo                                   OK

    apmonitor.apdailysts                               OK

    apmonitor.apinfo                                   OK

    apmonitor.apmonthsts                               OK

    apmonitor.apscanlog                                OK

    apmonitor.auth_group                               OK

    如果只想检查某几个库呢? 可以使用 –databases 参数:

    $ mysqlcheck -c --databases newmandela radius -uroot -p

    Enter password:

    newmandela.account                                 OK

    newmandela.alarm                                   OK

    newmandela.alarm_settings                          OK

    newmandela.auth_group                              OK

    使用 mysqlcheck 分析表:

    $ mysqlcheck -a radius payment_transactionrecord  -uroot -p

    Enter password:

    radius.payment_transactionrecord                   Table is already up to date

    上面的命令 用来分析 radius 库的 payment_transactionrecord表, -a 表示 analyze

    使用 mysqlcheck 优化表:

    # mysqlcheck -o radius payment_transactionrecord  -uroot -p

    Enter password:

    radius.payment_transactionrecord                   OK

    -o 代表 optimize ,这里是优化 radius 库的 payment_transactionrecord 表

    使用 mysqlcheck 修复表:

    # mysqlcheck -r radius payment_transactionrecord  -uroot -p

    Enter password:

    radius.payment_transactionrecord                   OK

    -r 代表 repair ,这里是 修复 radius 库的 payment_transactionrecord 表

    检查,优化,修复表组合命令:

    # mysqlcheck -uroot -p --auto-repair -c -o newmandela

    Error:  mysqlcheck doesn't support multiple contradicting commands.

    上面的命令报错了,去掉 -c

    # mysqlcheck -uroot -p --auto-repair -o newmandela

    Enter password:

    newmandela.account

    note     : Table does not support optimize, doing recreate + analyze instead

    status   : OK

    newmandela.alarm

    note     : Table does not support optimize, doing recreate + analyze instead

    status   : OK

    newmandela.alarm_settings

    note     : Table does not support optimize, doing recreate + analyze instead

    status   : OK

    每张表都出现了 Table does not support optimize, doing recreate + analyze instead, 代表什么意思呢? 它的意思不是说 innodb 引擎不支持 优化,可以参考 http://stackoverflow.com/questions/30635603/what-does-table-does-not-support-optimize-doing-recreate-analyze-instead-me 的回答。

    mysqlcheck 常用选项

    A, –all-databases 表示所有库

    -a, –analyze 分析表

    -o, –optimize 优化表

    -r, –repair 修复表错误

    -c, –check 检查表是否出错

    –auto-repair 自动修复损坏的表

    -B, –databases 选择多个库

    -1, –all-in-1 Use one query per database with tables listed in a comma separated way

    -C, –check-only-changed 检查表最后一次检查之后的变动

    -g, –check-upgrade Check for version dependent changes in the tables

    -F, –fast Check tables that are not closed properly

    –fix-db-names Fix DB names

    –fix-table-names Fix table names

    -f, –force Continue even when there is an error

    -e, –extended Perform extended check on a table. This will take a long time to execute.

    -m, –medium-check Faster than extended check option, but does most checks

    -q, –quick Faster than medium check option

    展开全文
  • mysqlcheck客户端工具可以检查和修复MyISAM,还可以优化和分析。 实际上,它集成了mysql工具中check、repair、analyze、optimize的功能、 有3种方式来调用mysqlcheck: shell> mysqlcheck[options] db_name ...
  • 最近mysql数据库经常死掉,用命令net stop mysql命令也无法停掉,关闭Tomcat的时候,出现Waiting for N instance(s) to be deallocated 信息。查了下,大概就是程序没有对数据库连接释放,导致Connection泄露了。...

    最近mysql数据库经常死掉,用命令net stop mysql命令也无法停掉,关闭Tomcat的时候,出现Waiting for N instance(s) to be deallocated 信息。查了下,大概就是程序没有对数据库连接释放,导致Connection泄露了。因为用的是开元集成的平台,内部程序也不可能一下子给改掉的,就验证一下咯。启动Tomcat,用户登录系统,用netstat -ano|findstr 8000命令来查看tomcat端口占用情况,可以看到8000端口会被用户的IP地址占用,而对应的PID是0,PID=0是什么呢,是叫System Idel Process的一个进程,这个进程是一个空闲的进程。Tomcat一直被这个进程占用,没有释放,时间长了用户多了,mysql就死掉了,至于是不是程序没有释放连接,这个应该是没可能,因为系统已经用了2年,这种情况出现的太少了。

    看一下mysql中表的情况,表的数据长度到达了几个G了,这种是BLOB类型的,存储的数据过多,这样的话是不是因为数据量太大,用户在用的时候对数据库进行操作,空间又不够,互相等待,造成死锁的问题呢?

    这年头,一定要注意备份啊,mysql要备份的东西比较多,

    (1)表结构文件,MySQL\MySQL Server 5.1\data目录下存放的就是数据库结构,会看到相应的数据库目录,数据库目录下面有.frm文件,.myd文件,.myi文件,这些文件都是表结构的文件。

    (2)表数据文件,MySQL Datafiles/ibdata1文件

    (3)日志文件,MySQL\MySQL Server 5.1\data目录下面ib_logfile0文件和ib_logfile1文件。二进制日志文件,如果你想要重新处理日志止的语句,这很有用。

    你的数据库结构没有问题的情况下,想恢复数据,如果有(2)、(3)应该是没有问题的,当时我只有(2),把ibdata1文件copy过去,恢复数据还是出了很多状况,启动系统还是不能用的,mysql日志一直提示Your database may be corrupt or you may have copied the InnoDB tablespace but not the InnoDB log files.说多了都是泪,谁让咱是IT呢,系统坏掉了电话都要被用户打爆的节奏,hold不住,无所不用其极的,各种搜索资料啊,最后尝试一下大多数人的办法,设置innodb_force_recovery参数。

    innodb_force_recovery影响整个InnoDB存储引擎的恢复状况。默认为0,表示当需要恢复时执行所有的

    innodb_force_recovery可以设置为1-6,大的数字包含前面所有数字的影响。当设置参数值大于0后,可以对表进行select,create,drop操作,但insert,update或者delete这类操作是不允许的。

    1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的corrupt页。

    2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行full purge操作,会导致crash。

    3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。

    4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。

    5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存储引擎会将未提交的事务视为已提交。

    6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。

    设置innodb_force_recovery=4重启msql,再恢复成默认值(即不需要再my.ini文件时设置innodb_force_recovery参数),重启mysql,重启Tomcat,OK了,太惊喜了。

    菜鸟一个,其中原理讲的都不太清楚,经验之谈,仅供参考。

    展开全文
  • 突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了。innodb损坏不能通过repair table 等修复myisam的命令操作。现在记录下解决过程
  • 介绍了检查并修复mysql数据库的具体方法,有需要的朋友可以参考一下
  • 修复mysql表

    2021-03-14 19:13:34
    也许很多人遇到过类似Can’t open file: ‘[Table]mytable.MYI’ 这样的错误信息,却不知道怎么解决他,下面我们做个介绍,多数情况...下面讲的方法只对MyISAM格式的有效。其他类型的损坏需要从备份中恢复。1,REPAIR...
  • mysqlcheck命令来快速修复所有的数据库有的时候因为掉电或者其他原因导致数据库损坏,我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库;例如:检查优化并修复所有的数据库用:1.先在运行...
  • MYSQL数据库修复程序

    2017-03-25 23:35:23
    MySQL数据库修复程序,查看,读取,设计。SQL数据库内容读取。
  • 检测是否损坏命令 check table `表名` 优化表命令 optimize table `表名` optimize table 用于回收闲置的数据库空间,当上的数据行被删除时,所占据的磁盘空间并没有立即...修复表命令 repair table `表名` ...
  • 主要介绍了shell脚本如何自动修复mysql损坏的,需要的朋友可以参考下
  • 搜索热词《MysqL应用MysqL下优化修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)》要点:本文介绍了MysqL应用MysqL下优化修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE),希望对您有用。如果有疑问,...
  • 主要介绍了mysql表优化、分析、检查和修复的方法,结合实例形式较为详细的分析了MySQL表进行优化,分析与修复等操作的各种常见命令与使用技巧,需要的朋友可以参考下
  • 索引异常,修复msql索引(引擎:myisam)myisamchk --safe-recover /usr/local/mysql/data/ename_news/dede_arccacherepair table customerquestion;Error infos: Table './ename_news/dede_arccache' is marked ...
  • PHP+MySQL后台,部分程序页面不显示...第一步:停掉MYSQL服务,cmd命令:net stop mysql。 第二步:保险起来,把整个数据库文件夹都备份起来。 第三步:打开数据库所在的文件夹,找到损坏的系统自动生成的文件(xxxx
  • mysql表修复的实用命令mysql表修复的实用命令mysql表修复的实用命令mysql表修复的实用命令mysql表修复的实用命令mysql表修复的实用命令
  • mysql表修复命令

    千次阅读 2012-07-17 13:00:31
    异常,坏? 运行程序突然报异常:Incorrect key file for table './xx_db/xx_table.MYI'; try to repair it   解决办法: 可以先运行 CHECK TABLE 表名 检查下是否存在错误。 然后运行 REPAIR TABLE 表名 ...
  • mysql 修复表 优化

    2017-08-16 10:54:22
    查询mysql表是否被损坏命令,如下: # CHECK TABLE 表名 mysql的长期使用,肯定会出现一些问题,一般情况下mysql表无法访问,就可以修复表了,优化时减少磁盘占用空间。方便备份。 表修复和优化命令,如下: ...
  • MysqL数据库Linux系统下MysqLcheck修复数据库命令(详解)》要点:本文介绍了MysqL数据库Linux系统下MysqLcheck修复数据库命令(详解),希望对您有用。如果有疑问,可以联系我们。MysqLcheck客户端工具可以检查和修复...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,234
精华内容 19,693
关键字:

mysql修复表命令

mysql 订阅