MySQL CSV Table is Marked as Crashed and Should be Repaired; Corrupted or Mangled Data; Error 1194

この記事で

症状

変更

原因

解决策

REPAIR TABLE

人工的にデータファイルを編集する

リファレンス

 

このファイルはOracle Support’s Rapid Visibility (RaV) プロセスで発信するので、独立した技術テストに制約されていない。

 

適用範囲:
MySQLサーバのバージョン4.1以上
この資料の情報は、すべてのプラットフォームに適用されます。

 

症状

CSV表テーブルをアクセスしてみると、以下のエラが現れた。

ERROR 1194 (HY000): Table ‘t1’ is marked as crashed and should be repaired

 

テーブルの損害は以上のエラと示せないから。データに損害によって、SELECTも使えるが、こわれたデータが返される。

 

変更

一般的に、以下の状況が起こったら、現れる:

  • MySQLのシャットダウン:これはオペレーションシステムシャットダウンを含んでいる、例えば電源が切れたなどの状況。
  • データディレクトリのディスクが足りない。

 

原因

CSVテーブルがこわれた。前に言ったように、これは非常状態に起こる。

 

注:SELECT 文が損害で失敗した場合に、INSERT文は実行し続ける。CSVテーブルに対して、行をインサートする。

 

.CSVがそのテーブルの損害が及ぼす。例えば、テーブルcsvtest.t1の場合、そのファイルは${datadir}/csvtest/t1.CSに${datadir}はMySQLインディクスに使われるデータディレクトリである。損害は常に一行がクリンアップアップされたと見える。それに次の行に同一の列から始まる:

1,”2014-01-11 12:32:22″,”abc”

2,”2014-01-15 13:11:12″,”def”

3,”20144,”2014-01-28 18:00:19″,”jkl”

5,”2014-02-04 12:49:30″,”mno”

6,”2014-02-04 13:22:25″,”pqr”

 

前のインディクスで第三行がこわれた、そして二つの部分を含んでいる:

  • 3,”2014

これはクリンアップされた行である

  • 4,”2014-01-28 18:00:19″,”jkl”

これは次の行

 

解决策

解決策が二つの方法がある:

REPAIR TABLEを使ってください

人工的にデータファイルを編集する

 

REPAIR TABLE

REPAIR TABLEコマンドは一番簡単な方法だが、テーブルがシャットダウンと標識されたときだけにこのコマンドを実行できる。実行方法は損害が発生する前にデータファイルをクリンアップする:

REPAIR TABLE csvtest.t1;

 

アラーム: REPAIR TABLE for a CSV table は初めての行を見つけたら、テーブルをクリンアップするので、データがなくなる!

 

人工的にデータファイルを編集する

ファイルエディタで人工的にテーブルのこわれた部分を削除することで、データファイルを編集できる例えば以上のインディクスによって、ファイルを変更できる:

1,”2014-01-11 12:32:22″,”abc”

2,”2014-01-15 13:11:12″,”def”

4,”2014-01-28 18:00:19″,”jkl”

5,”2014-02-04 12:49:30″,”mno”

6,”2014-02-04 13:22:25″,”pqr”

 

データファイルのコピを実行することを勧めている。

 

この方法のメリットは这种方法的优点是,你必须改变更细粒度的控制,例如上述更改,仅行id=3将丢失,而不是id> =3的所有行。

 

データファイルをコピするには以下の通りステージを使ってください(LinuxあるいはUnix;似たようなステップWindowsに利用できる)csvtest と t1をテーブルのデータベースと名前を代わってもいい:

  1. mysql> LOCK TABLES csvtest.t1 WRITE;
  2. mysql> FLUSH TABLES csvtest.t1;
  3. shell$ ls ‐l /var/lib/msyql/csvtest/t1.CSV
  4. shell$ cp /tmp/t1.CSV /var/lib/msyql/csvtest/t1.CSV
  5. Make sure the /var/lib/msyql/csvtest/t1.CSV has the same owner and access permissions as found

in step 3.

  1. mysql> UNLOCK TABLES;
  2. mysql> SELECT * FROM csvtest.t1 WHERE id = 6;

 

ステップ7.のクエリでCSVファイルを最後の行を見つけ出せるを確認する。

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号