MySQLデータベースが予期せずクラッシュし、テーブルデータファイルが破損して起動できなくなる問題を解決します。

MySQLデータベースが予期せずクラッシュし、テーブルデータファイルが破損して起動できなくなる問題を解決します。

問題:

MySQL データベースが予期せずクラッシュしたため、データベースを起動できませんでした。

エラーログ:

起動エラー: サービス mysqld の再起動

エラー! MySQL サーバーの PID ファイルが見つかりませんでした。
MySQL を起動しています。エラー! サーバーは PID ファイル (/www/wdlinux/mysql/var/iZ2358oz5deZ.pid) を更新せずに終了しました。

データベース エラー ログ:

200719 22:07:43 InnoDB: データベースは正常にシャットダウンされませんでした。
InnoDB: クラッシュリカバリを開始しています。
InnoDB: .ibd ファイルからテーブルスペース情報を読み取っています...
InnoDB: エラー: 名前 './ob_wp/ob_termmeta.ibd' のテーブルスペース 840 を追加しようとしています
InnoDB: テーブルスペースのメモリキャッシュに、ただしテーブルスペース
InnoDB: 名前 './dev_nss/dg_queue.ibd' の 840 がテーブルスペースにすでに存在します
InnoDB: メモリ キャッシュ!
200719 22:07:43 mysqld_safe mysqld は pid ファイル /www/wdlinux/mysql/var/iZ2358oz5deZ.pid から終了しました

ヒント: データベースの起動時にテーブル スペース情報が読み取られる場合、ob-wp ライブラリ内の ob_users.ibd テーブルのデータ ファイルはテーブル スペースにすでに存在します。

拡大する:

ストレージエンジンはmyisamです。データベースディレクトリには、.frm、.myi、.mydの3種類のファイルがあります。
(a) *.frm - テーブル定義。テーブル構造を記述するファイルです。
(b) *.MYD - 「D」データ情報ファイル。これはテーブルのデータ ファイルです。
(c) *.MYI - 「I」インデックス情報ファイル。テーブル データ ファイル内の任意のインデックスのデータ ツリーです。ストレージ エンジンは InnoDB です。データ ディレクトリには、.frm と .ibd の 2 種類のファイルがあります。
(a) *.frm - テーブル構造を持つファイル。
(b) *.ibd - テーブルデータファイル

出典: https://www.cnblogs.com/liucx/

方法1:

プロンプト情報によると、InnoDBテーブルが破損していると判断されたので、dev_nssライブラリディレクトリ内のテーブル構造とテーブルデータファイルをバックアップしてみてください。
mv ob_termmeta.ibd ob_termmeta.ibd,bak
mv ob_termmeta.frm ob_termmeta.frm.bak
その後、mysql を再起動しましたが、それでも起動できませんでした。他のテーブル データ ファイルがすでに存在するというメッセージが表示されました。破損したファイルを 3 回続けてバックアップしましたが、それでも起動できませんでした。したがって、この方法は放棄されます。

方法2:

1. 公式ウェブサイトのドキュメントを参照し、MySQL設定ファイル/etc/my.cnfに設定を追加して正常に起動します。
[mysqld]
innodb_force_recovery = 1

2. データベースをバックアップする
mysqldump -h172.168.2.100 -uroot -p -A > mysql_all_bak.sql
レポートが存在しない場合は、mysqldumpはパラメータ--forceを追加してエラーをスキップすることができます。

3. データベースを削除する
drop database hxdb; または mv hxdb hxdb_bak (安全のため)

4. パラメータinnodb_force_recoveryを削除します。
以前に設定したパラメータを削除した後、データベースを再起動します。

5. データのインポート
mysql -uroot -p < mysql_all_bak.sql
警告: コマンド ライン インターフェイスでパスワードを使用すると安全でない可能性があります。
エラー 1050 (42S01) 25 行目: テーブル '`hxdb`.`tb_info`' は既に存在します

テーブルがすでに存在するというメッセージが表示される場合は、innodb_force_recovery パラメータを削除した後、データベースがロールバックして対応する ibd ファイルを生成するため、ファイルを削除して再インポートする必要があります。
mysql -uroot -p < mysql_all_bak.sql

注記:

innodb_force_recovery パラメータの説明: クラッシュ リカバリ モード。通常は、深刻なトラブルシューティング状況でのみ変更されます。可能な値は0から6までです。

緊急の場合にのみこの変数を 0 より大きい値に設定し、InnoDB を起動してテーブルをダンプできるようにします。安全対策として、InnoDB は innodb_force_recovery が 0 より大きい場合、挿入、更新、または削除操作を防止します。
5.6.15 では、InnoDB を読み取り専用モードにするために、innodb_force_recovery が 4 以上に設定されています。 relay_log_info_repository=TABLE および master_info_repository=TABLE は InnoDB テーブルに情報を保存するため、これらの制限によりレプリケーション管理コマンドがエラーで失敗する可能性があります。

innodb_force_recovery はデフォルトで 0 です (強制リカバリなしの通常の起動)。 innodb_force_recovery に許可されるゼロ以外の値は 1 から 6 です。値が大きいほど、小さい値の機能が含まれます。たとえば、値 3 には値 1 と 2 のすべての機能が含まれます。
innodb_force_recovery 値が 3 以下でテーブルをダンプできる場合は、破損した単一ページのデータの一部のみが失われるという比較的安全な状況になります。 4 以上の値は、データ ファイルが永久に破損する可能性があるため危険であると見なされます。値 6 は、データベース ページが古い状態のままになり、B ツリーやその他のデータベース構造がさらに破損する可能性があるため、過剰であると考えられます。

安全上の理由から、innodb_force_recovery が 0 より大きい場合、InnoDB は INSERT、UPDATE、または DELETE 操作を防止します。 MySQL 5.6.15 以降では、innodb_force_recovery を 4 以上に設定すると、InnoDB は読み取り専用モードになります。
1 (SRV_FORCE_IGNORE_CORRUPT)
破損したページが検出された場合でもサーバーを実行させます。 SELECT * FROM tbl_name で破損したインデックス レコードとページをスキップするようにしてみてください。これにより、テーブルをダンプしやすくなります。
2 (SRV_FORCE_NO_BACKGROUND)
メイン スレッドとクリーンアップ スレッドの実行をブロックします。クリーンアップ操作中にクラッシュが発生した場合、この回復値によってクラッシュが防止されます。
3 (SRV_FORCE_NO_TRX_UNDO)
クラッシュ回復後にトランザクション ロールバックを実行しないでください。
4 (SRV_FORCE_NO_IBUF_MERGE)
挿入バッファのマージ操作を防止します。クラッシュを引き起こす場合は、実行しないでください。表の統計は計算されません。この値により、データ ファイルが永久に破損する可能性があります。この値を使用した後は、すべてのセカンダリ インデックスを削除して再作成する準備をしてください。 MySQL 5.6.15 では、InnoDB を読み取り専用に設定します。
5 (SRV_FORCE_NO_UNDO_LOG_SCAN)
データベースを起動するときには、UNDO ログを参照しないでください。InnoDB は、不完全なトランザクションであってもコミット済みとみなします。この値により、データ ファイルが永久に破損する可能性があります。 MySQL 5.6.15 では、InnoDB を読み取り専用に設定します。
6 (SRV_FORCE_NO_LOG_REDO)
リカバリ時にREDOログのロールフォワードは実行されません。この値により、データ ファイルが永久に破損する可能性があります。データベース ページを古い状態のままにしておくと、B ツリーやその他のデータベース構造にさらに破損が生じる可能性があります。 MySQL 5.6.15 では、InnoDB を読み取り専用に設定します。

出典: https://www.cnblogs.com/liucx/

公式サイトを参照してください:
強制的な innodb リカバリ
https://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_force_load_corrupted

これが役に立つことを願います

これで、MySQL データベースが予期せずクラッシュし、テーブル データ ファイルが破損して起動できなくなる問題の解決方法についての記事は終わりです。MySQL データベースが予期せずクラッシュし、テーブル データ ファイルが破損して起動できなくなる問題の関連ソリューションについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQLはテーブルデータを復元するためにfrmファイルとibdファイルを使用します
  • MySQL 全体または単一のテーブルデータのエクスポート
  • MySQLでデータを削除してもディスク領域が解放されないのはなぜですか
  • Ubuntu でディスク容量不足により MySQL が起動しない場合の解決策
  • MySQL ストレージ エンジン MyISAM の一般的な問題 (テーブル破損、アクセス不能、ディスク容量不足)
  • lnmp でディスク領域を保護するために MySQL ログをオフにする方法
  • ディスク容量を節約するためにMySQLを縮小するためのいくつかの提案
  • Mysql InnoDB のデータを削除した後にディスク領域を解放する方法
  • MySQL でテーブル データを削除した後もディスク領域がまだ占有されているのはなぜですか?

<<:  Dockerコンテナにnginxを簡単にデプロイするプロセスの分析

>>:  JavaScript コードベースをよりクリーンにする 5 つの方法

推薦する

Taobao ストアでズームインする効果は、スライドショーを使用する原理に似ています。

今日は、スライドを使用する原理に似た、Taobao のフロントエンドのマウス ズーム効果に慣れました...

Mysql5.7.17 winx64.zip 解凍バージョンのインストールと設定のグラフィックチュートリアル

1. mysql-5.7.17-winx64.zip をダウンロードします。リンク: https:/...

Helloダイアログボックスのデザイン体験の共有

「どうしたの?」特定の種類のダイアログ ボックスに慣れていない限り、ダイアログ ボックスが表示された...

Nginx Rewrite の使用シナリオとコード例の詳細な説明

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

Docker Composeオーケストレーションツールの詳細な説明

Docker の作成Docker Compose は、複数の Docker コンテナを定義して実行す...

MySQLを安全にシャットダウンする方法

MySQL サーバーをシャットダウンする場合、シャットダウン方法に応じてさまざまな問題が発生する可能...

Nginx Rewrite の使用シナリオと設定方法の分析

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

Vueプロジェクトウォッチで関数が繰り返しトリガーされる問題の解決

目次問題の説明:解決策1解決策2問題の説明:ページ A と B の 2 つがあり、各ページにはget...

Dockerでイメージを削除する方法

dockerでイメージを削除するコマンドはdocker rmiですが、このコマンドを実行してもイメー...

ポップアップウィンドウの上下中央左右と透明な背景のロックウィンドウ効果を実現する CSS

クリック後にポップアップボックスを実現し、上下左右に中央揃えし、灰色の透明マスクを追加してウィンドウ...

Navicat を使用して MySQL データベースをエクスポートおよびインポートする方法

MySql は、私たちが頻繁に使用するデータ ソースです。開発者が練習、小規模なプライベート ゲーム...

mysql ERROR 1045 (28000) 問題の解決方法

私はmysql ERROR 1045に遭遇し、この問題に長い時間を費やしました。私はそれを自分で書き...

Docker を使用した nGrinder パフォーマンス テスト プラットフォームの導入プロセスの分析

nGrinderとは何ですか? nGrinder は、スクリプトの作成、テストの実行、監視、結果レポ...

スケーラブルな列の完全な例を実現するための Ant 設計 Vue テーブル

ant-design-vue テーブルのスケーラブルな列の問題に対する完璧なソリューション。固定列と...

CSSアニメーションに基づくSVGボタンのサンプルコード

具体的なコードは次のとおりです。 <a href="#"> <...