问题

使用 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.