午後に仕事に行き、dedecms Web サイトに問題があることを聞いてショックを受けました。mysql ログを確認すると、全画面エラーが見つかりました。エラー メッセージは
次のとおりでした。 dedecmsv4dede_archives' はクラッシュ済みとしてマークされているため、修復する必要が
あります。 cms には問題があるとしてマークされており、修復する必要があります。そこで、すぐに履歴データを復元し、オンラインで原因を調べました。問題は最終的には解決されます。解決策は次のとおりです。
mysql インストール ディレクトリで bin/myisamchk ツールを見つけ、コマンド ラインに次のように入力します。
myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI
その後、myisamchk ツールがインデックスの復元に役立ちます。データテーブルの。 mysqlを再起動すると問題は解決します。
問題の分析:
1. エラーの原因 一部のネチズンは、dede_archives テーブルの頻繁なクエリと更新によって引き起こされるインデックス エラーだと言いました。なぜなら、私のページは静的に生成されたものではなく、動的ページだったからです。私もこの意見に非常に同意します。 。また、データベース サーバーが突然停電したり、データベース テーブルにサービスを提供する際にテーブルの元のファイルに対する何らかの操作が行われた場合など、何らかの理由で MYSQL データベースが破損した可能性があるとも言われています。テーブルが破損しており、データを読み取ることができません。つまり、不可解な問題により時計が損傷したのです。
問題番号は 145
2. 問題の解決方法です。
破損したテーブルの問題を修復しようとする場合、3 つのタイプの修復があります。一時ファイルを作成できないことを示すエラー メッセージが表示された場合は、メッセージで示されたファイルを削除して再試行してください。これは通常、以前の修復操作からの引き継ぎです。
修正内容は以下の 3 つです。
% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName
最初の方法は最も速く、最も一般的な問題を解決するために使用されます。最後の方法は最も遅く、他の方法では解決できない問題を解決するために使用されます。
MySQL データ ファイルの確認と修復 上記の方法で破損したテーブルを修復できない場合は、諦める前に次の 2 つのヒントを試すこともできます。
テーブルのインデックス ファイル (*.MYI) で修復不可能なエラーが発生した可能性がある場合、またはファイルが失われた場合でも、データ ファイル (*.MYD) とデータ フォーマット ファイル (*.frm) を使用して、それを再生します。まず、データ ファイル (tblName.MYD) のコピーを作成します。 MySQL サービスを再起動し、次のコマンドを使用してテーブルの内容を削除します。
mysql> tblName から削除;
テーブルの内容を削除すると、新しいインデックス ファイルが作成されます。ログアウトしてサービスを再度閉じ、新しい (空の) データ ファイルを、先ほど保存したデータ ファイル (tblName.MYD) で上書きします。最後に、myisamchk を使用して標準修復 (上記の 2 番目の方法) を実行し、テーブルのデータとテーブルのフォーマット ファイルの内容に基づいてインデックス データを再生成します。
テーブルのフォーマット ファイル (tblName.frm) が見つからないか、修復不可能なエラーがある場合でも、対応する CREATE TABLE ステートメントを使用してテーブルを再生成する方法がわかっている場合は、新しい .frm ファイルを再生成し、それをデータ ファイルで使用できます。およびインデックス ファイル (インデックス ファイルに問題がある場合は、上記の方法を使用して新しいファイルを再構築します)。まずデータ ファイルとインデックス ファイルのコピーを作成し、次に元のファイルを削除します (データ ディレクトリ内のこのテーブルに関連するすべてのレコードを削除します)。
MySQL サービスを開始し、元の CREATE TABLE ファイルを使用して新しいテーブルを作成します。新しい .frm ファイルは正常に動作するはずですが、標準的な修復 (上記の 2 番目の方法) を実行するのが最善です。
3. myisamchk ツールの概要 (mysql の公式マニュアルを参照)
myisamchk ユーティリティを使用して、データベース テーブルに関する情報を取得したり、データベース テーブルを確認、修復、最適化したりできます。 myisamchk は、MyISAM テーブル (.MYI および .MYD ファイルに対応するテーブル) に適用されます。
myisamchk を呼び出すメソッド:
shell> myisamchk [options] tbl_name ...
options は、myisamchk に実行させる内容を指定します。それらについては後で説明します。 myisamchk --help を呼び出してオプションのリストを取得することもできます。
tbl_name は、チェックまたは修復するデータベース テーブルです。データベース ディレクトリのどこかで myisamchk を実行しない場合、myisamchk はデータベースの場所がわからないため、データベース ディレクトリへのパスを指定する必要があります。実際、myisamchk は、操作しているファイルがデータベース ディレクトリにあるかどうかを気にしません。データベース テーブルに対応するファイルを別の場所にコピーし、そこで復元操作を実行できます。
必要に応じて、myisamchk コマンド ラインを使用して複数のテーブルに名前を付けることができます。インデックス ファイルに名前を付けてテーブルを指定することもできます (接尾語 ".MYI" を付けます)。スキーマ「*.MYI」を使用して、ディレクトリ内のすべてのテーブルを指定できます。たとえば、データベース ディレクトリにいる場合は、次のようにディレクトリ内のすべての MyISAM テーブルを確認できます:
shell> myisamchk *.MYI
データベース ディレクトリにいない場合は、ディレクトリへのパスを指定することで、そこにあるすべてのテーブルを確認できます:
shell> myisamchk /path/to/database_dir/*.MYI
MySQL データ ディレクトリへのパスにワイルドカードを指定することで、すべてのデータベースのすべてのテーブルをチェックすることもできます:
shell> myisamchk /path/to/datadir/*/*.MYI
すべての MyISAM テーブルをすばやく確認するための推奨される方法は、
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
です。
すべての MyISAM テーブルをチェックし、破損したテーブルを修復する場合は、次のコマンドを使用できます:
shell> myisamchk --silent --force --fast --update-state
-O key_buffer=64M -O sort_buffer=64M
-O read_buffer=1M -O write_buffer=1M
/path/to/datadir/*/*.MYI
このコマンドは、64MB 以上の空きメモリがあることを前提としています。 myisamchk を使用したメモリ割り当ての詳細については、「myisamchk のメモリ使用量」を参照してください。
myisamchk を実行するときは、他のプログラムがテーブルを使用していないことを確認する必要があります。それ以外の場合、myisamchk を実行すると、次のエラー メッセージが表示されます。
警告: クライアントはテーブルを使用しているか、テーブルを適切に閉じていません。
これは、ファイルを閉じていないか、ファイルを適切に閉じずに終了した別のプログラム (mysqld サーバーなど) によって更新されているテーブルをチェックしようとしていることを示します。
mysqld が実行されている場合は、FLUSH TABLES を使用してメモリ内に残っているテーブルの変更を強制的にフラッシュする必要があります。 myisamchk を実行するときは、他のプログラムがテーブルを使用していないことを確認する必要があります。この問題を回避する最も簡単な方法は、myisamchk の代わりに CHECK TABLE を使用してテーブルをチェックすることです。