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 つの方法

推薦する

MySQL および Oracle のバッチ挿入 SQL の一般的な記述例

目次例えば:一般的な執筆:要約する例えば:次に、データベースのUSERテーブルにUserオブジェクト...

js 日付と時刻のフォーマット方法の例

js 日付時刻形式日付と時刻を指定された形式に変換します。例: YYYY-mm-dd HH:MM は...

VMware仮想マシンにdeepin20をインストールする最も完全で詳細なプロセス

仮想マシンソフトウェア: VMware Workstationイメージ: deepin-deskto...

CSS 共通スタイルで二重矢印を描画するサンプルコード

1. 単一の矢印への複数の呼び出し単一の矢印を実装したら、二重矢印を実装するのは簡単です。上では、単...

Vueはドラッグアンドドロップまたはクリックで写真をアップロードする機能を実装しています

この記事では、ドラッグアンドドロップやクリックによる画像のアップロードを実現するためのVueの具体的...

CentOS7 カーネル カーネル5.0 バージョンアップグレード

アップグレードプロセス:元のシステム: CentOS7.3 [root@my-e450 ~]# un...

WeChat アプレットカスタムタブバーステップ記録

目次1. はじめに2. タブバーのスタイルをカスタマイズする3. カスタムタブバーと関連設定を導入す...

HTML チュートリアル: title 属性と alt 属性

XHTML は CSS レイアウトの基礎です。jb51.net は常に XHTML 知識の習得を重視...

VirtualBox は CentOS7 仮想マシンと拡張ツールをインストールします (画像とテキスト)

コンピュータシステム: win7この記事は主に写真に基づいており、多くの写真が含まれていますCent...

WordPress実験を実装するための3つの仮想マシンのKVM展開の詳細説明

1. KVM の概要カーネルベースの仮想マシンの略称は、Linux 2.6.20 以降のすべての主要...

vue+tp5はシンプルなログイン機能を実現

この記事では、参考までに、簡単なログイン機能を実装するためのvue+tp5の具体的なコードを紹介しま...

Centos サーバーに MySql をデプロイし、Navicat に接続するプロセスの詳細な説明

(1)サーバー構成: [root@localhost ~]# cd /usr/local/src/ ...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...

スネークゲームを作るための Pygame コード

目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...

MySql ファジークエリ JSON キーワード取得ソリューションの例

目次序文オプション1:オプション2:オプション3:オプション4(最終的に採用されたオプション):要約...