1

約65のテーブルを持つデータベースがあります。テーブルの 1 つは、order_line と呼ばれる大きな MyISAM テーブルです。ときどきこのテーブルが壊れます。CHECK TABLE コマンドを使用すると、次のメッセージが表示されます。

オペレーション | メッセージの種類 | メッセージ_テキスト
チェック | 警告 | 「テーブルはクラッシュとしてマークされています」
チェック | 警告 | 「3人のクライアントがテーブルを使用しているか、テーブルを適切に閉じていません」
チェック | エラー | 「114948 の 1149921 個のキーが見つかりました」
チェック | エラー | 「腐敗」

私はインターネットでこれをたくさん読みましたが、最も一般的な答えは「テーブルを修理する必要があります」です。それは私にとってはうまくいきますが、これが起こる理由と、これをどのように再現できるかを知りたいです。

Web アプリケーションがあり、顧客ごとに 1 つのデータベース (300 以上) があります。スクリプトを実行して、これらすべてのデータベースを更新します。これを行うと、これらのテーブルの多くが破損するのではないかと心配しています。

また、これらすべてのデータベースを更新する最善の方法を知りたいです。テーブル/データベースを使用しているユーザーがいないことを確認するために、MySQL をシャットダウンして再起動する必要がありますか?

4

2 に答える 2

2

の次のコマンドでデータベースを個人的に修復しますmysql myDatabase

CHECK TABLE myTable ; 
--- ERROR
REPAIR TABLE myTable;
CHECK TABLE myTable ; 
--- OK
于 2016-06-10T09:32:54.710 に答える
1

MyISAM テーブルが破損する理由は、このエンジンの実装に固有のものです。Write-Ahead-Log と専用の戦略を使用してダーティ バッファをフラッシュする代わりに、オペレーティング システムに依存してデータベース バッファをディスクにフラッシュします。MyISAM もトランザクション対応ではありません。

InnoDBあなたのケースにより適していると思われるエンジンを使用することを強くお勧めします (表order_line)。MyISAM は、ユース ケースに適したエンジンではありません。

于 2013-06-05T08:24:04.117 に答える