導入
MySQLテーブルが破損すると、エラーが発生し、テーブル内のデータを読み取れなくなることがあります。破損したテーブルからデータを読み取ろうとすると、通常はサーバーがクラッシュします。.
テーブル破損の一般的な原因
- MySQLサービスがデータの書き込み途中で停止する
- サーバーによるテーブルの変更中に外部アプリケーションによってテーブルが変更される
- 予期せぬ車の停止
- コンピュータのハードウェア障害
- MySQLコードのソフトウェアバグ
テーブルの破損が疑われる場合は、修復またはトラブルシューティングを開始する前に、データディレクトリをバックアップしてください。これにより、データ損失のリスクを最小限に抑えることができます。.
MySQLで破損したテーブルを修復する手順
まず、MySQL サービスを停止します。
sudo systemctl stop mysql注: Rocky Linuxなどの一部のシステムでは、MySQLサービスは mysqld 知られること。.
次に、すべてのデータを新しいバックアップディレクトリにコピーします。Ubuntuシステムでは、デフォルトのデータディレクトリは /var/lib/mysql/ は:
cp -r /var/lib/mysql /var/lib/mysql_bkpバックアップが完了したら、テーブルが実際に破損しているかどうかを確認する準備が整います。テーブルがストレージエンジンによってバックアップされていない場合は、 マイISAM MySQLを使用している場合は、次のコマンドを実行して再起動することができます。 チェック表 MySQL プロンプト内から確認します。
sudo systemctl start mysqlCHECK TABLE table_name;テーブルが破損している場合は、それを確認するメッセージが表示されます。MyISAMテーブルが破損している場合は、通常、次のコマンドで修復できます。 修理表 修正しました:
REPAIR TABLE table_name;修復が成功すると、出力に次のようなメッセージが表示されます。
Output
+--------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+--------------------------+--------+----------+----------+
| database_name.table_name | repair | status | OK |
+--------------------------+--------+----------+----------+テーブルがまだ破損している場合は、破損したテーブルを修復するための代替方法が MySQL ドキュメントに記載されています。.
InnoDB ストレージ エンジンを使用して破損したテーブルを修復する
ストレージエンジンによってテーブルが破損した場合 インノDB 修復プロセスは、使用しているMySQLのバージョンによって異なります。InnoDBはバージョン8.0以降、MySQLのデフォルトのストレージエンジンとして使用されており、自動破損チェックおよび修復機能を備えています。InnoDBは、読み取る各ページのチェックサムを使用して不良ページを検出し、チェックサムに差異が見つかった場合はMySQLサーバーを自動的に停止します。.
InnoDBにはクラッシュリカバリメカニズムがあり、サーバーの再起動でほとんどの問題を解決できるため、InnoDBテーブルの修復が必要になることは稀です。ただし、InnoDBテーブルの再構築が必要な場合は、MySQLのドキュメントにその手順が記載されています。 ダンプとリロード 推奨されます。この方法では、ツールを使用して破損したテーブルへのアクセスを回復します。 mysqldump これは、テーブル構造とその中のデータを保持するテーブルの論理バックアップを作成し、その後テーブルをデータベースに再挿入するために使用されます。.
MySQLサービスを再起動します
まず、MySQL サービスを再起動して、サーバーにアクセスできるかどうかを確認します。
sudo systemctl restart mysqlサーバーがまだダウンしているか利用できない場合は、オプションを使用できます 強制回復 設定でInnoDBを有効にします。これを行うには、ファイルを作成します。 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 これを使ってテーブルデータをバックアップします。このファイルには任意の名前を付けることができますが、ここでは「 出力.sql 私たちはそれをこう呼んでいます:
mysqldump database_name table_name > out.sql次に、データベースからテーブルを削除します。これを行うには、次のコマンドを使用します。
mysql -u user -p --execute="DROP TABLE database_name.table_name"最後に、ファイルを使用してテーブルを作成します。 ごみ 最近作成したものを取得します。
mysql -u user -p < out.sqlInnoDBストレージエンジンは、従来のMyISAMエンジンよりも一般的に耐障害性が高いことにご注意ください。InnoDBを使用したテーブルは破損する可能性がありますが、自己修復機能により、テーブル破損やクラッシュのリスクは大幅に低減されます。.
結果
このガイドでは、MySQLで破損したテーブルを修復する方法と、MyISAMとInnoDBストレージエンジンの両方で発生する問題を解決するために様々な手法を使用する方法を学習しました。データ損失のリスクを避けるため、変更を加える前に必ずデータをバックアップしてください。.









