MySQLデータベースが破損した場合、そもそもなぜデータベースが破損したのか不思議に思うかもしれません。この投稿では、破損したMySQLデータベースを修復する方法についての質問に答える前に、データベース破損の背後にある考えられる理由の概要を説明します。
MySQLデータベースの破損の背後にある理由
MySQLデータベースは、次のいずれかの理由で破損する可能性があります。
- サーバーの突然のシャットダウン
- ディスクサブシステム、ディスクコントローラ、ドライバなどのデータの保存と取得に使用されるハードウェアの欠陥。
- 進行中の更新の進行中に「mysqld」プロセスが強制終了されます
- ソフトウェアのバグ
破損したデータベースの原因を特定するのは難しい場合があります。原因が何であれ、あなたが持つべき懸念は、破損したMySQLデータベースを修復する方法です。
破損したMySQLデータベースを修復する方法
最初に確認する必要があるのは、表示されるエラーメッセージです。以下は、MySQLデータベースが破損したときに発生する可能性のあるいくつかのエラーメッセージです。
エラー144: テーブルがクラッシュし、最後の修復に失敗しました
エラー141: 書き込みまたは更新時に一意のキーまたは制約を複製する
エラー136: インデックスファイルにこれ以上のスペースはありません
エラー134: レコードはすでに削除されています
エラー126: インデックスファイルがクラッシュする/ファイル形式が間違っている
エラー: ファイル「wtlicensemanager.dll」が見つかりませんでした
修理を無料で行いたい場合は、次の2つのオプションがあります。
- 手動で行います。
- 試用期間を使用してソフトウェアを使用して実行してください。
データベース回復ソフトウェアは、破損したデータベースを修復する際に、より優れた、より高速な作業を実行できます。
破損したMySQLデータベースを修復するために使用できるソフトウェアアプリケーションの1つを次に示します。
このMySQLデータベース修復ツールは、MySQLのInnoDBデータベースエンジンとMyISAMデータベースエンジンの両方を使用して作成されたデータベースを修復します。 SQL修復ツールのデモバージョンをダウンロードして、回復可能なデータベースを保存する前にプレビューできます。
主な機能:
- WindowsおよびLinuxシステムでMySQLデータベースを回復できます。
- InnoDBファイル(.ibdata、.ibd、および.frm)とMyISAMファイル(myd、.myi、および.frm)を回復します
- テーブル、テーブルプロパティ、データ型、ビュー、トリガーなどのデータベースオブジェクトを復元します。
- データベースコンポーネントの選択的なリカバリを可能にします
破損したMySQLデータベースを手動で修復する方法
MySQLには、InnoDBとMyISAMの2種類のストレージエンジンがあります。 InnoDBテーブルにはFRM、IBDATA、およびIDBファイルが含まれ、MyISAMテーブルにはFRM、MYD、およびMYIファイルが含まれます。
続行する前に
手動リカバリを試みる前に考慮すべきいくつかの事項を次に示します。
- サーバーを再起動しないでください
サーバーを再起動すると、サーバーは破損したデータベースを疑わしいモードにする可能性があります。これにより、データベースがオフになります。また、データベースへの接続中にエラーが発生する可能性があります。サーバーを再起動せずにリカバリを試行する必要があります。
- シングルユーザーモードを使用する
データベースに接続している唯一のユーザーであることを確認してください。シングルユーザーモードでは、他のユーザーの干渉を排除して、完全に制御できます。
- MySQLをアップグレードしないでください
破損したファイルを修復するためにMySQLデータベースを更新することを考えるかもしれません。しかし、そうではありません。アップグレードすると、永続的なデータ損失が発生する可能性があります。
- 破損したMySQLデータベースのバックアップを取ります
データを失う原因となる可能性のあるエラーが発生する可能性があるため、破損したファイルのバックアップを作成することが重要です。手動の手順が正常なファイルに影響を与えないという保証はありません。したがって、手動リカバリを試みる前にバックアップをとっておくのが安全です。
バックアップするには、次のコマンドを使用します。
mysqldump db_name> database_name.sql
database_nameの代わりにデータベース名を入力するだけです。
上記が機能しない場合は、次のことを試してください。
mysqldump –u [username] –p [password] [database_name]> [dump_file] .sql
データベースをバックアップする別の方法があります:
service mysqld stop
cp -r / var / lib / mysql / var / lib / mysql_bkp
バックアップができたので、破損したMySQLデータベースの修復を試みることができます。
MySQLデータベースを手動で回復する方法
MyISAMデータベースの修復
データベーステーブルにMyISAMデータベースストレージエンジンを使用している場合は、次のコマンドを使用してテーブルを修復できます。
Mysqlcheck
MySQLサーバーが実行されている場合は、次のmysqlcheckコマンドを実行してテーブルを修復します。
mysqlcheck -r [database_name]
必ず「database_name」をデータベースの名前に置き換えてください。
Myisamchk
サーバーが実行されていない場合は、myisamchkコマンドを使用してデータベーステーブルを修復してみてください。
注: このコマンドを実行する前に、サーバーでテーブルが開いていないことを確認してください。
myisamchk table_name
ケースのテーブル名でテーブル名を修復します。このコマンドは、テーブルを自動的に修正します。
サーバーを再起動するには、次のように入力します。
service mysqld start
InnoDBリカバリを強制する
破損したInnoDBデータベーステーブルからデータを抽出するには、InnoDB強制リカバリを実行する必要があります。
ステップ1: まず、my.cnfファイルを開く必要があります。
このファイルで、[mysqld]セクションを見つけます。
このセクションに次の行を追加します。
innodb_force_recovery =1
次に、構成ファイルを保存して、MySQLサーバーを再起動します。 innodb_force_recoveryの値は1から6まで設定できます。ただし、データが破損する可能性があるため、4を超える値はお勧めしません。
ステップ2: テーブルデータを新しいファイルにダンプします。
これを行うには、次のコマンドを使用します。
mysqldump –u user –p db_name table_name> single_dbtable_dump.sql
ステップ3: 破損したテーブルをデータベースから削除します。
mysql –u user –p –execute =” DROP TABLE db_name.table_name”
ステップ4: ダンプファイルからテーブルを復元します。
mysql –u user –p
ステップ5: ファイルが修復されたら、次のコマンドを使用して強制回復モードを無効にします。
#innodb_force_recovery=…
これで、MySQLサービスを通常モードで再起動できます。
上記の方法が、破損したMySQLデータベースの修復に役立つことを願っています。