问题

使用 mysqldump 备份时报错:

[root@mybox ~]# mysqldump -p --result-file=/tmp/dbbackup.sql --database myDBname
Enter password:
mysqldump: Got error: 145: Table './myDBname/myTable1' is marked as crashed and should be repaired when using LOCK TABLES

解决方案一

检查表:

CHECK TABLE mytable1

修复表:

REPAIR TABLE mytable1

解决方案二

此方法经笔者验证成功

  • 停止 MySQL 服务。
  • 进入 MySQL 数据目录当前库下。
  • 检查数据表文件,若有异常会显示,无异常则无输出(不输入 --silent 则显示所有检查结果):

    [root@localhost interface]# myisamchk *.MYI --silent
    myisamchk: MyISAM file jk_court_judgment_simple_item.MYI
    myisamchk: warning: Table is marked as crashed
    myisamchk: error: Found 195 keys of 194
    myisamchk: error: Recordlink that points outside datafile at 53148
    MyISAM-table 'jk_court_judgment_simple_item.MYI' is corrupted
    Fix it using switch "-r" or "-o"
    myisamchk: MyISAM file jk_personal_investment_holder.MYI
    myisamchk: warning: Table is marked as crashed
    myisamchk: error: Found key at page 12288 that points to record outside datafile
    myisamchk: error: Recordlink that points outside datafile at 69472
    MyISAM-table 'jk_personal_investment_holder.MYI' is corrupted
    Fix it using switch "-r" or "-o"
  • 修复:-o 尝试恢复 -r 强制恢复

    myisamchk *.MYI -o
  • 参数说明

    -r, --recover       Can fix almost anything except unique keys that aren't
                        unique.
    -o, --safe-recover  Uses old recovery method; Slower than '-r' but can
                        handle a couple of cases where '-r' reports that it
                        can't fix the data file.
    -s, --silent        Only print errors.  One can use two -s to make
                        myisamchk very silent.