myisamchk および mysqlcheck ツールを使用して破損した MySQL データベース ファイルを迅速に修復する方法

myisamchk および mysqlcheck ツールを使用して破損した MySQL データベース ファイルを迅速に修復する方法

サーバーのデータベース ハード ディスク領域がいっぱいだったため、大量のデータの書き込みに失敗し、「キー 'username' のエントリが重複しています」というエラーが発生しました。

このような MySQL データベース エラーが発生した場合は、MySQL データベース インデックスに問題がある可能性があります。では、MySQL データベース インデックスとは何でしょうか?

分析: インデックスがプライマリまたは一意である場合、データ テーブル内のデータに対応するフィールドは、各レコードの一意性を保証する必要があります。そうしないとこのエラーが発生します。

これは通常、データベースへの書き込み時に発生します。たとえば、Discuz! 4.1 フォーラム プログラムでは、すべてのメンバーのユーザー名が一意であること、つまりユーザー名のインデックスが一意であることが求められます。このとき、既存のユーザー名レコードを cdb_members テーブルに強制的に挿入したり、レコードのユーザー名を既存のユーザー名に更新したりすると、このエラーが表示されます。

たとえば、あるネットユーザーの dedecms の Web サイトに問題が発生しました。そのサイトにアクセスすると、全画面にエラー メッセージが表示されました。MySQL ログを確認すると、次のようなエラー メッセージが表示されました。

テーブル .dedecmsv4dede_archives はクラッシュとしてマークされており、修復する必要があります

CMS 記事テーブル dede_archives が問題ありとしてマークされており、修復する必要があることが示されます。

そこで、すぐに履歴データを復元し、インターネットで原因を調べました。ついに問題は解決しました。

解決策は次のとおりです。

mysql インストール ディレクトリで bin/myisamchk ツールを見つけて、コマンド ラインに入力します。

myisamchk -c -r ../data/dedecmsv4/dede_archives.MYI

次に、myisamchk ツールを使用してデータ テーブルのインデックスを復元します。 mysql を再起動すると問題は解決します。

次に、MySQL データベースを修復するには、通常、次の 2 つの方法で myisamchk ツールまたは mysqlcheck ツールを使用します。

1. myisamchk ツール

myisamchk を使用するには、MySQL サーバーを一時的に停止する必要があります。たとえば、discuz データベースを全面的に改修したいと考えています。次の操作を行います。

# service mysql stop (MySQLを停止します);

# myisamchk -r /データベースファイルの絶対パス/*MYI

# サービスmysql開始

myisamchk は、データ テーブル内のインデックス エラーを自動的にチェックして修復します。

2. mysqlcheckツール

mysqlcheck を使用すると、MySQL を停止する必要がなく、ホット フィックスが可能になります。手順は次のとおりです。

# mysqlcheck -r discuz.*

# service mysql stop (MySQLを停止します);

# myisamchk -r /データベースファイルの絶対パス/*MYI

# サービスmysql開始

myisamchk はデータ テーブル内のインデックス エラーを自動的にチェックし、修復します。

注意: myisamchk と mysqlcheck の両方で、修復を強制するために -f を使用しないでください。-f パラメータは、一般的な修復が失敗した場合に、問題を修復するために一部の誤ったデータを削除します。したがって、絶対に必要な場合を除いて -f を使用しないでください。

以下は他のネットユーザーからのコメントです

すべてのデータベースをチェックして修復します:

# mysqlcheck -A -o -r -p
パスワードを入力してください:
db1 大丈夫
db2 正常
db3 大丈夫
db4 大丈夫
......
......
......

指定されたデータベースを修復する

# mysqlcheck -o -r データベース名 -p

あなたはできる

コマンドの詳細:

mysqlcheck クライアントは MyISAM テーブルをチェックおよび修復できます。テーブルを最適化および分析することもできます。
mysqlcheck は myisamchk と同様に機能しますが、動作は異なります。主な違いは、mysqlcheck は mysqld サーバーが実行中の場合に使用する必要があり、myisamchk はサーバーが実行中でない場合に使用する必要があることです。 mysqlcheck を使用する利点は、テーブルをチェックまたは修復するためにサーバーを停止する必要がないことです。
MySQLcheck は、ユーザーが SQL ステートメント CHECK TABLE、REPAIR TABLE、ANALYZE TABLE、および OPTIMIZE TABLE を使用するための便利な方法を提供します。実行する操作で使用するステートメントを決定し、そのステートメントをサーバーに送信して実行します。
mysqlcheck を呼び出す方法は 3 つあります。

シェル> mysqlcheck [オプション] db_name [テーブル]
シェル> mysqlcheck [オプション] ---データベース DB1 [DB2 DB3...]
シェル> mysqlcheck [オプション] --all --database

テーブルが指定されていない場合、または --database または --all-database オプションが使用されている場合は、データベース全体がチェックされます。
他のクライアントと比較して、mysqlcheck には特別な機能があります。バイナリの名前を変更すると、チェックリスト (--check) のデフォルトの動作が変更される可能性があります。デフォルトでテーブルを修復できるツールが必要な場合は、mysqlcheck を mysqlrepair にコピーするか、シンボリック リンク mysqlrepair を使用して mysqlcheck にリンクします。 mysqlrepair を呼び出すと、コマンドに従ってテーブルを修復できます。

mysqlcheck のデフォルトの動作を変更するには、次の名前を使用できます。

mysql修復

デフォルトのオプションは--repairです

mysql分析
デフォルトのオプションは--analyzeです

mysql最適化
デフォルトのオプションは--optimizeです

mysqlcheck は次のオプションをサポートしています。
- -ヘルプ、 -?
ヘルプ メッセージを表示して終了します。
--すべての--データベース、-A
すべてのデータベース内のすべてのテーブルをチェックします。 --database オプションを使用する場合と同じですが、すべてのデータベースの名前がコマンド ラインで指定される点が異なります。
--オールインワン、-1
各テーブルに対して 1 つのステートメントを発行する代わりに、処理するデータベース内のすべてのテーブルを指定する 1 つのステートメントが各データベースに対して実行されます。
--分析、-a
分析表。
--自動修復
チェックされたテーブルが破損している場合は、自動的に修復されます。すべてのテーブルをチェックした後、必要な修復が自動的に実行されます。
--character-sets-dir=パス
文字セットがインストールされているディレクトリ。セクション5.10.1「データとソートの文字セット」を参照してください。
--チェック、-c
表にエラーがないか確認してください。
--変更のみチェック、-C
前回のチェック以降に変更されたテーブル、または適切に閉じられなかったテーブルのみがチェックされます。
--圧縮
クライアントとサーバー間で送信されるすべての情報を圧縮します (両方が圧縮をサポートしている場合)。
---データベース、-B
データベース内で指定されたすべてのテーブルを処理します。このオプションを使用すると、すべての文字列名引数はテーブル名ではなくデータベース名として扱われます。
---debug[=デバッグオプション], -#[デバッグオプション]
デバッグログを書き込みます。 debug_options 文字列は通常 'd:t:o,file_name' です。
--default-character-set=文字セット
charset をデフォルトの文字セットとして使用します。セクション5.10.1「データとソートの文字セット」を参照してください。
--拡張、-e
このオプションを使用してテーブルをチェックする場合、テーブルが 100% 一貫していることを確認できますが、時間がかかる場合があります。
このオプションを使用してテーブルを修復する場合、拡張修復を実行すると実行に長い時間がかかるだけでなく、大量のガベージ行も生成されます。
--高速、-F
適切に閉じられなかったテーブルのみがチェックされます。
--force、-f
SQL エラーが発生しても続行します。
--host=ホスト名、-h ホスト名
指定されたホスト上の MySQL サーバーに接続します。
--medium-check、-m
--extended よりも高速なチェックを実行します。エラーは 99.99% しか検出されないため、ほとんどの場合これで十分です。
--最適化、-o
テーブルを最適化します。
--password[=パスワード], -p[パスワード]
サーバーに接続するときに使用するパスワード。短いオプション形式 (-p) を使用する場合は、オプションとパスワードの間にスペースを入れないでください。コマンドラインの --password または -p オプションの後にパスワード値が指定されていない場合は、パスワードの入力を求められます。
--port=ポート番号、-P ポート番号
接続に使用する TCP/IP ポート番号。
--protocol={TCP | ソケット | パイプ | メモリ}
使用する接続プロトコル。
--クイック、-q
チェック テーブルでこのオプションを使用すると、チェックで行をスキャンして不正なリンクをチェックすることがなくなります。これが最も早く確認する方法です。
このオプションを使用してテーブルを修復する場合は、インデックス ツリーのみを修復しようとします。これが最も早い解決策です。
--修復、-r
一意の値が一意でない場合を除き、ほとんどの問題を修正する修正を実行します。
--サイレント、-s
サイレントモード。エラーメッセージのみが印刷されます。
--socket=パス、-S パス
接続に使用するソケット ファイル。
--テーブル
--database または -B オプションを上書きします。オプションに続くすべての引数はテーブル名として扱われます。
--user=ユーザー名, -u ユーザー名
サーバーに接続するときに使用する MySQL ユーザー名。
--詳細, -v
詳細モード。プログラム操作の各段階に関する情報を出力します。
--バージョン、-V
バージョン情報を表示して終了します。

以下もご興味があるかもしれません:
  • MySQLを監視するためのbinlogログ解析ツールの詳しい説明:Canal
  • データベース管理に役立つ 5 つの MySQL GUI ツール
  • MySQL監視ツールmysql-monitorの詳細な説明
  • ツールの構築と使用の詳細な紹介。Anemometer は MySQL のスローログをグラフィカルに表示します。
  • MySQL ストレステストツールの使い方
  • Pycharm ツールが MySQL データベースに接続できませんでした
  • MySQLデータ移行方法とツールの分析
  • MySQL データを誤って削除した場合の簡単な解決策 (MySQL フラッシュバック ツール)
  • KTLツールはMySQLからMySQLへのデータの同期方法を実現します
  • MySQL可視化ツールNavicatへの接続方法
  • MySQL関連のツールをいくつかお勧めします

<<:  Docker環境にJenkinsコンテナをインストールする詳細なチュートリアル

>>:  Apache Bench で Web ストレス テストを実装する方法

推薦する

MySQLを水平から垂直に、垂直から水平に変換する方法

データの初期化 `test_01` が存在する場合はテーブルを削除します。 テーブル「test_01...

Linuxはjoin -a1を使用して2つのファイルを結合します

次の2つのファイルを結合するには、それらを結合して1.txtに結合します。 # 1.txt ジェリー...

CocosCreator スケルトンアニメーション ドラゴンボーン

CocosCreator バージョン 2.3.4ドラゴンボーンアニメーションキールアニメーションを ...

LinuxソースコードからTIME_WAITの期間を分析する

目次1. はじめに2. まずLinux環境を紹介しましょう3. TIME_WAIT状態遷移図4. 継...

VUE と Canvas を使用して Thunder Fighter タイピング ゲームを実装する方法

今日は、サンダーファイタータイピングゲームを実装します。ゲームプレイは非常に簡単です。それぞれの「敵...

Reactは複雑な検索フォームの展開と折りたたみ機能を実装します

時間に余裕を持って、過去を忘れましょう。前のセクションでは、[検索] フォームとクエリおよびリセット...

MySQL コード実行構造例の分析 [シーケンス、分岐、ループ構造]

この記事では、例を使用して MySQL コード実行構造について説明します。ご参考までに、詳細は以下の...

CSS3は、大きな円のドット分布と回転効果を実現するためにtransform-originを使用します。

まず、transform-origin 属性を使用する必要があります。transform 属性は必ず...

優れたグラフィックデザイナーが習得すべき7つのスキル

1》ウェブデザインが得意であること2》Webページのデザイン方法を知る3》計画する4. SEOを理解...

MySQL で指定エンコーディングを実装する際の落とし穴について

前面に書かれた環境: MySQL 5.7+、MySQL データベースの文字エンコードは utf8、テ...

css-loader を使用して vue-cli で css モジュールを実装する

【序文】 Vue と React の CSS モジュール ソリューションはどちらも、実装にローダーに...

MySQL トランザクションの詳細

目次導入取引の4つの特徴トランザクション分離レベル確認するMVCC現在の読書スナップショット読み取り...

MySQL シリーズ 11 ログ

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...

純粋な CSS 実装 (スクリプトなし) HTML コマンド スタイルのツールチップ テキスト プロンプト効果

実行プロセスを分析します。マウスをノードに移動して、ノードにツールチップ実装を開くための識別子 (...

Nginx Rewriteモジュールを使用するいくつかのシナリオ

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...