1

クラッシュとしてマークされているmysqlテーブルからいくつかのデータを取得しようとしています。マシンの復元されたバックアップに取り組んでいるので、何も心配する必要はありません。

テーブルをmysqldumpしようとすると(FYI使用している--wh​​ereを使用して、必要なレコードを指定します)、エラーが発生します。

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 に答える