MySQLは、最も人気のあるオープンソースのRDBMS(関係データベース管理システム)の1つです。これは、急速に成長しているLAMPスタックの不可欠な一部であり、開発者やシステム管理者の間で絶大な支持を得ています。非関係型データベースと比較して、SQLはデータを効果的に整理、保存、管理するための優れた機能を提供します。SQLデータベースの際立ったテーブル配置機能と優れた機能により、大企業から中小企業まで、組織のあらゆるレベルで好まれる選択肢となっています。
MySQLのテーブルは稀に破損することがあり、そのようなエラーが発生すると、そこに保存されているデータが読み取れなくなります。破損したテーブルからデータを読み取ろうとすると、サーバーがクラッシュし、エラーまたはエラーのリストがスローされます。
MySQLテーブル破損の潜在的な原因
以下は、テーブルが破損する最も代表的な原因の一部です。
- 再起動後にMySQLサービスがクラッシュする。
- 停電などにより、マシンが予期せずシャットダウンする。
- メモリの不具合またはハードウェアの故障。
- Software bugs in the OSまたはSQLコードのソフトウェアバグ。
- 書き込み中にMySQLがシャットダウンする。
- SQLのアップデート中にシステムがOFFになる。
破損が疑われるテーブルを修復する前に、情報ディレクトリのバックアップを作成してください。これにより、データ紛失の可能性を減らすことができます。このクイックガイドでは、MySQLで破損したテーブルを修復するためのトラブルシューティング手順を説明します。
前提条件
このチュートリアルを進めるには、以下が必要です。
- システムに最新バージョンのUbuntuがインストールされていること。
- システムユーザーがsudo権限.
- を持っていること。sudoアカウントへのアクセスに問題がある場合は、MySQLのrootパスワード.
- の変更を検討してください。サーバー上にMySQLがセットアップされていること。
ステップ1:MySQLサービスの停止とデータのバックアップ
まず、systemctlコマンドを使用してMySQLサービスを停止します。
|
1 |
sudo systemctl stop mysql |
SQLサービスを停止したら、次のステップは既存のすべてのファイルのバックアップを新しいディレクトリに作成することです。Ubuntuのデフォルトのデータディレクトリである/var/lib/mysql/を使用して、すべてのシステムデータをコピーします。
|
1 |
cp -r /var/lib/mysql /var/lib/mysql_bkp |
ステップ2:エラーの特定
次に、調査を開始し、破損したテーブルを特定します。テーブルがMyISAMストレージエンジンを使用している場合は、CHECK TABLEステートメントを使用してテーブルのステータスを確認します。
|
1 |
mysql> CHECK TABLE table_name; |
出力として、破損したテーブルを確認するメッセージが表示されます。
ステップ3:破損したテーブルの修復
もしMyISAMテーブルにエラーがあり、それを特定した場合は、REPAIR TABLEステートメントを使用してエラーを修正します。
|
1 |
mysql> REPAIR TABLE table_name; |
修復が成功した場合、出力として以下のエラーのないメッセージが表示されます。
|
1 2 3 4 5 6 7 8 9 10 11 |
出力: +--------------------------+--------+----------+----------+ | Table | Op | Msg_type | Msg_text | +--------------------------+--------+----------+----------+ | database_name.table_name | repair | status | OK | +--------------------------+--------+----------+----------+ |
ただし、エラーが再発する場合は、MySQLバージョン8.0の公式ドキュメントに従ってテーブルを再構築または修復してください。
Unlike the MyISAMストレージエンジンとは異なり、テーブルの修復に関わるInnoDBのプロセスは、InnoDBストレージエンジンで異なります。InnoDBはMySQL 8.0のデフォルトのストレージエンジンです。自動的な破損チェックと修復機能を備えています。MySQL InnoDBは、読み取るすべてのページでチェックサムを実行することにより、破損したページをチェックします。不一致が検出された場合、MySQLサーバーを自動的に停止します。
結論として、InnoDBテーブルを修復する必要があることはほとんどありません。InnoDBには、再起動によってほとんどの問題を解決できるクラッシュ回復メカニズムが備わっています。
MySQLサービスを再起動して、サーバーにアクセスできるかどうかを確認してください。
|
1 |
sudo systemctl restart mysql |
再起動後も破損したInnoDBテーブルを再構築できない場合は、MySQLのドキュメントで推奨されている「Dump and Reload」方法を試してください。この方法では、mysqldumpユーティリティを使用して、破損したテーブルへのアクセスを回復します。テーブルのlogical backupを保存および保持するためのフォルダを作成する必要があります。エラーが修正されると、テーブルがデータベースに再ロードされます。
ステップ4:innodb_force_recoveryオプションの活用
サーバーがクラッシュしたまま、またはアクセスできない状態が続く場合は、force_recoveryオプションを使用してみてください。ON状態のforce_recoveryオプションは、MySQLデータベースを復元するための優れた方法です。このオプションを有効にするには、mysqld.cnfファイルをnanoテキストエディタで編集します:
|
1 |
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf |
以下の行を[mysqld]セクションの下に挿入します:

ファイルを保存して閉じ、MySQLサービスを再起動します。
ステップ5:mysqldumpファイルの作成
破損したテーブルにアクセスできる場合は、mysqldumpオプションを使用して、すべてのダンプを新しいファイルに出力します。新しいファイルにはお好みの名前を付け、最後に.sql拡張子を必ず追加してください。ここでは、ファイル名をdemo.sql:
|
1 |
mysqldump database_name table_name > demo.sql |
その後、DROP TABLEクエリを使用してデータベースからテーブルを削除します。MySQLプロンプトを再度開く必要がないように、次の構文を使用できます。
|
1 |
mysql -u user -p --execute="DROP TABLE database_name.table_name" |
次に、作成したダンプドキュメントdemo.sqlを使用して、テーブルを復元します:
|
1 |
mysql -u user -p --database=database_name < demo.sql |
これでMySQLの破損したテーブルの修復が完了し、データベースをシームレスに使用できるようになりました。
結論
大量のデータを扱っている場合、テーブルの破損や予期しないシステムクラッシュが発生する可能性があります。なお、MySQL InnoDBストレージエンジンは、以前のMyISAMエンジンよりも耐障害性に優れています。また、InnoDBストレージエンジンを使用しているテーブルも破損する可能性はありますが、その自動回復機能のおかげで、テーブルの破損や障害の危険性は大幅に減少しています。.
最後に、データベースに関する多くのトピックやチュートリアルを、当社のブログでご覧いただけます。:
ハッピーコンピューティング!
コメント
コメントはまだありません。最初のコメントを投稿しましょう。