MySQLデータベーステーブルの破損修复のステップあり

近代の世界では、会社が特定のデータベースサーバープラットフォームに依存しているのではなく、适切なワークロードとクライアントの要求に応じて十分な機能と高い性能を提供する多くのデータベースプラットフォームが利用可能です。MySQLは、多くの機能と高い性能を提供するデータベースプラットフォームの1つであり、

他のRDBMSと同様に、MySQLはデータベースやテーブルの破損に弱いです。マイクロソフトやCrowdStrikeによる最近のアウトレイクはMySQLデータベースサーバーにも影響を与えました。オペレーティングシステムの失敗によって、データベースのテーブルやデータベース全体が破損してしまいます。

この記事では、私がどのようにしてMySQLデータベースのテーブルを破損し、修復するかを説明します。この記事は、DBAsにとって、破損をシミュレートするのを役立つし、破損したMySQLテーブルを復旧または修復する最善の方法を決定するのを助けます。

MySQLデータベースの破損について理解する

MySQLデータベースの破損は、いくつかの方法で現れることがあります。

アクセス不可のテーブル

テーブルのすべてまたは特定のサブセットがアクセスできなくなり、破損したテーブルにアクセスしようとすると、インデックスファイルやデータファイルの破損を指すエラーに遭遇します。

データの不具合エラー

テーブルが破損している場合、意味のあるデータではなく、クエリーは無意味な値、不一致または不完全な結果を返すかもしれません。

予想外のシャットダウン

いくつかの場合、MySQLはテーブルにアクセスしたり、`mysqldump`を使用してバックアップを実行したりしている間にクラッシュするかもしれません。私は破損シナリオをシミュレートしている际にこのエラーを経験しました。テーブルのデータファイルを破損させました。サービスを起動した後、SELECTステートメントを使用してテーブルにアクセスしようとしたとき、MySQLサービスは自動的にクラッシュしました。

データベース操作中のエラーメッセージ

破損したテーブルにアクセスする際に、以下のようなエラーに直面するかもしれません。

Plain Text

 

これらのエラーは、データファイルまたは関連の索引ファイルが破損していることを示します。

破損の原因を理解することは、将来の発生を防ぐためと、データの整性を保証するために非常に重要です。

MySQLテーブルの修復の前提条件

修復を試みる前に、以下のようなものを確保してください。

  • MySQLデータベースの完全なバックアップ
  • 十分なディスクスペース
  • MySQLサーバーへの管理者アクセス

今、テーブル破損をシミュレートしましょう。

MySQLテーブルの破損

私たちは、データベースの修復プロセスを学ぶ前に、データベースを破壊する方法を理解する必要があります。デモのために、私はMySQLデータベースサーバー上に「CorruptDB」という名前のデータベースを作成しました。また、CorruptDBデータベースにcorrupt_tableという名前のテーブルも作成しました。

以下のコードは、データベースとテーブルを作成するためのものです。

MySQL

 

私は、以下のクエリを実行して、corrupt_tableテーブルに100万のレコードを追加しました。

MySQL

 

注意:テーブルの破壊のシミュレーションは、私のノートPCで行われています。生产、開発、またはどのような環境でこれを試すべきではありません。このデモで使用しているテーブルは、MyISAMデータベースエンジンで作成されています。アルテンライトストORAGE ENGINESを読むことで、MySQL Serverのデータベースエンジンについてより詳細に了解することができます。

以下の手順でテーブルを破壊しました。

手順1: MySQLサービスの停止

MySQLサービスを停止する必要があります。これを行うために、管理者権限でPowerShellを実行し、以下のコマンドを実行します。

Plain Text

 

また、サービスから停止することもできます。

手順2: テーブルの索引ファイルの破壊

今は、corrupt_tableテーブルの索引ファイルを破壊する必要があります。MyISAMデータベースエンジンを使用してテーブルを作成すると、作成時に3つのファイルが作成されます。

  • MYDファイル: このファイルには実際のデータが含まれています。
  • MYIファイル: これは索引ファイルです。
  • Frm ファイル: このファイルにはテーブル構造が含まれています。

私たちは索引ファイルを破壊します。データファイルはデフォルトの場所にあり、それは「C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb。」です。破壊のためには、16進编辑器を使用しています。

16進编辑器をダウンロードしてインストールします。そして、それを使ってMYIファイルを開きます。このファイルは以下の画像のようになります。

最初の5Byteをランダムな値に変更してください。ファイルを保存して编辑器を閉じてください。

次に、サービスを起動してテーブルにアクセスしようとします。

手順3: MySQLサービスを起動し、テーブルにアクセスする

まず、PowerShellで以下のコマンドを実行してMySQLサービスを起動してください。

Plain Text

 

サービスが起動した後、MySQLコマンドラインで以下のクエリを実行してください。

MySQL

 

クエリは以下のエラーを返しました。

このエラーは、corrupt_tableの索引が破壊されており、修復する必要があることを示しています。

MySQLテーブルの修復に使用できる手動方法

破損したMySQLテーブルを修復するために特定の方法があります。最初の方法は、CHECK TABLEREPAIR TABLEコマンドを使用することです。

CHECK TABLEとREPAIR TABLEコマンド

MySQLの内部コマンドCHECK TABLEREPAIR TABLEを使用してテーブルを復元することができます。これらのコマンドは、MyISAMテーブルの診断と修復を行います。

テーブルの整合性を確認する`CHECK TABLE`コマンドは、テーブルの構造、インデックス、およびデータに対して損傷を確認し、詳細を表示します。以下はそのスyntaxです。

Plain Text

 

さまざまなオプションを指定することができます。

  1. QUICK: このオプションは、損傷したインデックスなどの問題を迅速に確認して特定します。
  2. FAST: これは、正しく閉じられていないテーブルを確認します。
  3. CHANGED: このオプションは、最後のCHECK TABLE実行後に変更されたテーブルだけを確認します。
  4. MEDIUM: このオプションは、レコードを確認し、テーブルとデータ間のリンクが正しいか確認します。
  5. EXTENDED: このオプションは、テーブル構造と内容を彻底的にスキャンして確認します。

ここでは、デモとしてクイックスキャンを行います。以下はコマンドです。

Plain Text

 

スクリーンショット:

上のスクリーンショットで、corrupt_tableのインデックスが損傷しており、修復する必要があることを指し示しています。

私たちは、REPAIR TABLEコマンドを使用して、テーブル内の損傷を修復します。REPAIR TABLEコマンドは、特にMyISAMデータベースエンジンを使用しているテーブルのテーブル構造とデータを損傷から回復するために使用されます。インデックスが損傷している場合、REPAIR TABLEコマンドはインデックスを再構築します。

以下はREPAIR TABLEのスyntaxです。

Plain Text

 

以下のオプションを指定することができます。

  • QUICK: これは、テーブルのインデックスファイルにだけ修復します。テーブルのデータファイルにはアクセスしません。
  • 拡張: このオプションを使用すると、コマンドは彻底的な修復を行います。これはテーブルのすべてのレコードをスキャンして、インデックスファイルを修復または再作成するために使用されます。

このデモでは、テーブルのインデックスを壊れているため、快速オプションを使用します。以下のコマンドを実行してください。

Plain Text

 

スクリーンショット:

上のスクリーンショットで、corrupt_tableが正常に修復されたことがわかります。確認するため、MySQL Workbenchで以下のクエリを実行してください。

MySQL

 

クエリの出力:

上のように、テーブルは今アクセス可能です。

mysqldumpコマンドを使用してテーブルの復元

第二种の方法は、バックアップから整个のテーブルを復元することです。この方法は、REPAIR TABLEコマンドを使用して修復できない、高度に壊れたテーブルに適用できます。

MySQLテーブルをバックアップから復元するには、mysqldumpコマンドを使用できます。mysqldump — データベースバックアッププログラムの記事を読むことで、mysqldumpコマンドの使用方法を学ぶことができます。テーブルを復元するスyntaxは以下の通りです。

MySQL

 

スyntaxで:

  • Username: MySQLデータベースに接続する際に使用するユーザー名を入力してください。
  • -p: パスワードを指定します。空にしておくと、MySQLはパスワードを求めることになります。
  • [database_name]: 復元しようとしているデータベースの名前を指定してください。
  • Table_dump.sql: バックアップファイルの完全修飾名を指定します。

デモのために、私はCorruptDBデータベースをC:\MySQLData\Backupディレクトリにある場所からバックアップを取りました。

corrupt_tableを復元するために、以下のコマンドを使用できます。

MySQL

 

コマンドが成功して実行されると、テーブルにアクセスすることができます。以下のクエリを実行して確認してください。

MySQL

 

クエリの出力:

上のスクリーンショットで、テーブルの復元が成功したことがわかります。

phpMyAdminを使用する

phpMyAdminツールを使用して、壊れたMySQLデータベースを修復することもできます。phpMyAdminは、MySQLおよびMariaDBを管理したり保守したりする图形ユーザーインターフェースです。デモのために、私はラップトップにそれをインストールしました。

  • テーブルを修復するには、phpMyAdminを起動し、壊れたテーブルが存在するデータベースに移動します。
  • 右側のパネルで、CorruptDBデータベースで作成されたテーブルのリストを表示できます。
  • Corrupt_tableをリストから選択し、下拉ボックスからテーブルを修復するオプションを選択します。

以下は参照用のスクリーンショットです。

テーブルが修復されると、corrupt_tableの状態がOKになります。以下はスクリーンショットです。

結論

この記事では、MySQLデータベースの破損原因とその解決方法を学びました。私は、16進编辑器を使用してMySQLテーブルを破損する手順を段階ごとに説明しました。また、CHECK TABLEコマンドとREPAIR TABLEコマンドを使用して修復する方法もカバーしました。また、mysqldumpユーティリティを使用してテーブルを復元する方法も学びました。

破損したMySQLデータベーステーブルの修復は難しいことがありますが、適切なツールと方法を使用することで、処理可能です。手動メソッドは基本の解決策を提供しますが、phpMyAdminは包括的で信頼性のある復旧オプションを提供します。常時バックアップを取ることと、データベースの健康状况を維持することで、破損の危険を最小限にするようにしてください。

Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step