GNU/Linux >> Linux の 問題 >  >> Ubuntu

MySQLデータベースを修復する方法

はじめに

MySQLは、データベースを分析および修復するためのいくつかの異なる方法を提供します。エラーや異常はさまざまな理由で発生しますが、その一部には次のようなものがあります。

  • MySQLの更新またはダウングレード。
  • インデックスまたはデータの急激な変化。
  • テーブルの不整合。

破損したデータをチェックしてテーブルを修復する場合、エラーを修正するために実行する手順は、データベースへの接続方法、データベースサーバーの状態、エラーの種類、および使用するデータベースエンジンによって異なります。

この記事では、MySQLデータベースのトラブルシューティングと修復を行う複数の方法を紹介します。

前提条件

  • root権限を持つターミナルまたはコマンドライン。
  • MySQLバージョン8.0がインストールおよび構成されています。
  • 破損したデータベースまたはデータベーステーブル。

MySQLテーブルのエラーをチェックする方法

診断の実行は、問題のトラブルシューティングの最初のステップです。 MySQLテーブルのエラーをチェックする方法は2つあります。

  • MySQLを介してCHECK TABLE クエリ。
  • ターミナルプログラムの使用mysqlcheck

チェックテーブルでテーブルをチェック

チェックテーブル クエリは、サービスの実行中にMySQLで機能します。一般的な使用法は次のとおりです。

CHECK TABLE <table name> [, table name, table name] [option] [option];

最も簡単な使用法は、オプションのない1つのテーブルです。

CHECK TABLE <table name>;

CHECK TABLEの出力 クエリは、チェック結果に関する有益な表を示しています:

テーブルをチェックするときに使用できるオプションは次のとおりです。

  • アップグレード用 -バージョンの不整合を検出します。たとえば、MySQL 8.0は2桁の年をサポートしていないため、そのような値を含むテーブルにはアップグレードのマークが付けられます。
  • クイック -行のリンクが正しくないかどうかをチェックしません。これは、タイムアウトを回避するのに役立ちます。
  • FAST -適切に閉じられていないテーブルのチェックを実行します。
  • 変更 -最後のチェック以降に変更があったテーブル、または正しく閉じられていないテーブルのみをチェックします。
  • -テーブルの行をチェックして、削除されたリンクの有効性を確認し、行のチェックサムを実行します。
  • 拡張 -完全な整合性をチェックします。

オプションがない場合、 CHECK TABLE MEDIUMを実行します MyISAMのテーブルとビューを確認してください。 アップグレード用 およびQUICK 他のオプションは無視されますが、InnoDBエンジンテーブルとビューのチェックを実行します。

オプションを組み合わせて、より詳細なチェックを行うこともできます。たとえば、テーブルが適切に閉じているかどうかをすばやく確認するには、次のコマンドを実行します。

CHECK TABLE <table name> FAST QUICK;

テーブルに適用されないオプションはすべて無視されます。

mysqlcheckを使用してテーブルをチェックする

mysqlcheck commandは、 CHECK TABLEのコマンドラインバージョンです。 。 MySQLサービスが動作している間、プログラムはターミナルで実行されます。チェックを実行するには:

1. rootユーザーとして、データベースが保存されているディレクトリに移動します。

sudo su
cd /var/lib/mysql

2.データベース全体を次のように確認します:

mysqlcheck <database name>

または、テーブル名も指定して、データベース内の特定のテーブルを確認します。

mysqlcheck <database name> <table name>

MySQLデータベースを修復する方法

MySQLでデータベースを修復する方法はいくつかあります。ただし、これらの方法は迅速な解決策ではなく、データが失われる可能性があることに注意してください。データベーステーブルが頻繁に破損している場合は、発生の理由を特定してください。

変更を加えて修復を開始する前に、ディレクトリのコピーを作成してください:

cp -rfv /var/lib/mysql /var/lib/mysql_copy

または、修復ソリューションを試す前に、データベースのバックアップバージョンを作成します。ガイドに従ってください:MySQLデータベースをバックアップおよび復元する方法。

以下に、MySQLデータベースを修復する方法の3つのオプションを示します。

REPAIRTABLEクエリを使用したMySQLデータベースの修復

問題のあるデータベースとテーブルをスキャンして特定した後、問題を修正する最も簡単な方法は、 REPAIR TABLEを使用することです。 クエリ:

修復中にサーバーがシャットダウンした場合は、 REPAIR TABLEを再実行してください サーバーが再起動したときの操作。同じテーブルで他の操作を実行する前に、必ずこれを実行してください。通常の状態では、MyISAMテーブルでこのメソッドを使用してもデータが失われることはありません。

MySQLデータベースをmysqlcheckで修復する

mysqlcheck コマンドは、ターミナルのデータベーステーブルを修復する代わりの方法です。

1.まず、rootユーザーとしてMySQLデータベースフォルダに移動します:

cd /var/lib/mysql

2. -rを追加します mysqlcheckのオプション データベーステーブルを修復するコマンド:

mysqlcheck -r <database> <table name>

mysqlcheck -r コマンドは、 REPAIR TABLEの最終バージョンです。 クエリ。

ALTERTABLEを使用したMySQLデータベースの修復

ALTER TABLEを使用します 同じストレージエンジンを使用してテーブルを再構築するクエリ。たとえば、InnoDBテーブルがある場合は、次を実行します。

ALTER TABLE <table name> ENGINE = InnoDB;

MyISAMテーブルを再構築するには、次を使用します。

ALTER TABLE <table name> ENGINE = MyISAM;

テーブルが使用するストレージエンジンがわからない場合は、次のクエリを実行して調べてください。

SHOW CREATE TABLE <table name>;

MySQLデータベースに対するエンジン固有の診断と修復の実行

使用するデータベースエンジンに応じて、MySQLはデータベーステーブルを分析および修復するためのエンジン固有のアプローチを提供します。

MyISAMテーブルは破損する傾向があります。ただし、ほとんどの場合、エラーは簡単に修正できます。

InnoDBデータベースを操作する場合、チェックサム値が一致しないと破損が発生します。エラーは通常、停電またはその他のハードウェアの問題が原因で発生します。

myisamchkを使用したMyISAMテーブルの確認と修復

MySQLは、MyISAMテーブルに特定のチェッカーを提供します。

1.MySQLサーバーをシャットダウンします。ターミナルを開いて実行します:

systemctl mysql stop

2. rootユーザーとして、データベースの場所に移動します。

cd /var/lib/mysql/<database name>

3.特定のテーブルを確認するには、次を実行します。

myisamchk <table name>

4.次を実行してテーブルを修復します:

myisamchk --recover <table name>

5. MySQLサーバーを再起動します:

systemctl restart mysql

6.最後に、リカバリ後にMySQLのテーブルを確認します。

sudo mysql -u <user> -p <password>
USE <database name>;
SELECT * FROM <table name> LIMIT 4;

InnoDBリカバリプロセスの実行

MySQLのドキュメントでは、InnoDBデータベースに対してInnoDBリカバリプロセスを実行することを推奨しています。

1.お気に入りのテキストエディタを使用して、グローバル構成ファイルを見つけて開きます。 UbuntuおよびDebianシステムの場合、場所は次のとおりです。

cd /etc/mysql/my.cnf

2.次のオプションをmy.cnfに追加します ファイル:

[mysqld]
innodb_force_recovery=4

デフォルトでは、強制リカバリオプションは0(オフ)に設定され、最大6になります。すべての新しいレベルには、小さい数値のリカバリ機能が含まれています。

3.ファイルを保存して閉じます。

4. MySQLサーバーを再起動して、新しい構成ファイルが適用されることを確認します。

systemctl restart mysql

5.ホームフォルダで、 mysqldumpを使用してすべてのデータベースをバックアップファイルにエクスポートします コマンド:

sudo mysqldump --all-databases --add-drop-database --add-drop-table --routines > <file name>.sql

6. MySQLクライアントを起動し、影響を受けるすべてのデータベーステーブルを削除します。データベーステーブルを削除するには、次のことを試してください。

DROP TABLE IF EXISTS <table name>;

テーブルがドロップしない場合は、データベーステーブルを手動で削除してみてください。 rootユーザーとしてログインし、データベースがあるディレクトリに移動します。

sudo su
cd /var/lib/mysql/<database name>

データベーステーブルを削除します:

rm -r <table name>

7. MySQLサーバーを停止します:

systemctl stop mysql

8. my.cnfで ファイル、 innodb_force_recoveryをコメントアウトします 手順2で追加されたオプションで、リカバリモードを無効にします。次に、ファイルを保存して閉じます。

9. MySQLサーバーを再起動します:

systemctl start mysql

10.バックアップ.sqlからデータベースを復元します MySQLシェルのファイル。 MySQLクライアントにログインします:

sudo mysql -u <username> -p <password>

11.次のクエリを実行して、データベースをインポートします。

USE <database name>;
# Turning off auto commit is optional and speeds things up for larger databases
SET autocommit=0; 
SOURCE <file name>.sql;

12.最後に、データベースをテストして、すべてが正しく機能することを確認します。そうでない場合は、バックアップからデータベースを復元し、別の方法を試してください。


Ubuntu
  1. データベース間でMySQLテーブルをコピーする方法

  2. 破損したMysqlデータベーステーブルを修復する方法

  3. phpMyAdminを使用してMySQLデータベースとテーブルを修復する方法

  1. LinuxでMySQLのバージョンを確認する方法

  2. WorkbenchでMySQLデータベースを作成する方法

  3. ある mysql データベースから別の mysql データベースにテーブルをコピーする方法

  1. MySQLでテーブルを作成する方法

  2. MySQLSHOWトリガーの使用方法

  3. MySQLデータベースをバックアップおよび復元する方法