MySQLで破損したテーブルを修復する方法

0 株式
0
0
0
0

導入

MySQLテーブルが破損すると、エラーが発生し、テーブルに保存されているデータを読み取れなくなることがあります。破損したテーブルからデータを読み取ろうとすると、通常、サーバーがクラッシュします。.

テーブル破損の一般的な原因は次のとおりです。

  • MySQL サーバーが書き込みの途中で停止します。.
  • 外部アプリケーションが、サーバーによって同時に変更されているテーブルを変更します。.
  • デバイスの電源が予期せずオフになります。.
  • コンピュータのハードウェアが故障します。.
  • MySQL コードのどこかにソフトウェア バグがあります。.

テーブルのいずれかが破損していると思われる場合は、トラブルシューティングやテーブルの修復を行う前に、データリストをバックアップしてください。これにより、データ損失のリスクを軽減できます。.

まず、MySQL サービスを停止します。

sudo systemctl stop mysql

次に、すべてのデータを新しいバックアップフォルダにコピーします。Ubuntuシステムの場合、デフォルトのデータディレクトリは/var/lib/mysql/です。

cp -r /var/lib/mysql /var/lib/mysql_bkp

バックアップを取得したら、テーブルが実際に破損しているかどうかを確認できます。テーブルがMyISAMストレージエンジンを使用している場合は、MySQLを再起動し、MySQLプロンプトからCHECK TABLE文を実行することで破損の有無を確認できます。

sudo systemctl start mysql
CHECK TABLE table_name;

この文の出力には、破損しているかどうかを知らせるメッセージが表示されます。MyISAMテーブルが実際に破損している場合は、通常、REPAIR TABLE文を発行することで修復できます。

REPAIR TABLE table_name;

修復が成功した場合、出力に次のようなメッセージが表示されます。

Output
+--------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status | OK |
+--------------------------+--------+----------+----------+

テーブルがまだ破損している場合は、破損したテーブルを修復するためのいくつかの代替方法が MySQL ドキュメントに示されています。.

一方、破損したテーブルがInnoDBストレージエンジンを使用している場合、修復プロセスは異なります。InnoDBはMySQLバージョン8.0以降のデフォルトのストレージエンジンであり、自動破損チェックと修復機能を備えています。InnoDBは、読み取るすべてのページでチェックサムを実行して破損ページをチェックし、照合順序の不一致が見つかった場合はMySQLサーバーを自動的に停止します。.

InnoDBにはクラッシュリカバリメカニズムが搭載されており、サーバーの再起動時にほとんどの問題を解決できるため、InnoDBテーブルの修復が必要になることは稀です。しかし、破損したInnoDBテーブルを再構築する必要がある場合は、MySQLのドキュメントでは「ダンプとリロード」方式の使用を推奨しています。この方式では、破損したテーブルへのアクセスを復元し、mysqldumpユーティリティを使用してテーブル構造とデータを保持する論理バックアップを作成し、その後、テーブルをデータベースにリロードします。.

これを念頭に置いて、MySQL サービスを再起動して、サーバーにアクセスできるかどうかを確認します。

sudo systemctl restart mysql

サーバーがダウンしているかアクセスできない場合は、InnoDBのforce_recoveryオプションを有効にすると効果的です。mysqld.cnfファイルを編集することで設定できます。UbuntuおよびDebianシステムでは、このファイルは通常etc/mysqlにあります。Red HatおよびRockyシステムでは、このファイルは通常/etc/my.cnf.dにあります。.

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld] セクションに次の行を追加します。

. . .
[mysqld]
. . .
innodb_force_recovery=1

ファイルを保存して閉じ、MySQLサービスを再起動します。破損したテーブルに正常にアクセスできる場合は、mysqldumpユーティリティを使用してテーブルデータを新しいファイルにダンプします。このファイルには任意の名前を付けることができますが、ここではdump.sqlという名前を付けます。

mysqldump database_name table_name > out.sql

次に、データベースからテーブルを削除します。MySQLコマンドを再度実行せずに済むように、次のコマンドを使用できます。

mysql -u user -p --execute="DROP TABLE database_name.table_name"

その後、作成したダンプ ファイルを使用してテーブルを復元します。

mysql -u user -p < out.sql

InnoDBストレージエンジンは、従来のMyISAMエンジンよりも一般的にフォールトトレランスが高いことに注意してください。InnoDBを使用したテーブルが破損する可能性は依然としてありますが、自己修復機能により、テーブルの破損や障害のリスクは大幅に低減されます。.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

あなたも気に入るかもしれない