1

我正在尝试从标记为已崩溃的 mysql 表中检索一些数据。我正在处理机器的恢复备份,所以我不需要担心任何事情。

当我尝试 mysqldump 表时(仅供参考,我正在使用 --where 指定我需要哪些记录),我收到一个错误:

mysqldump: Got error: 144: Table './[db]/[table]' is marked as crashed and last (automatic?) repair failed when doing LOCK TABLES

如果我使用 --lock-tables=false 我会得到同样的错误(但在执行 SHOW FIELDS 时失败)。

如果我尝试从表中选择第一条记录,我会得到同样的错误。

如果我运行 CHECK TABLE [table],我会收到以下警告/错误:

warning  | 1 client is using or hasn't closed the table properly |
warning  | Size of indexfile is: 1991678976      Should be: 1024 |
error    | Record-count is not ok; is 30030697   Should be: 0    |
warning  | Found 141967876 deleted space.   Should be 0          |
warning  | Found 3101578 deleted blocks       Should be: 0       |
warning  | Found 34721783 key parts. Should be: 0                |
error    | Corrupt                                               |

这意味着如果我做一个修复表,我将丢失所有数据!那里应该有30030697条记录......

我有什么方法可以获取这些数据吗?

4

1 回答 1

3

要修复有问题的表,请发出命令

myisamchk --recover /var/lib/mysql/DATABASENAME/TABLE_NAME.myi

(其中 DATABASENAME 是您正在使用的数据库的名称,而 TABLE_NAME 是要检查的表的名称。)

如果这不能完全恢复表,您可以重新运行将 –recover 替换为 –safe-recover 的命令,该命令更慢且更彻底。

如果在行级锁定或错误写入(坏扇区)期间存在严重冲突,它们只会进行这样的转储。

于 2013-03-08T15:44:39.207 回答