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は数百万のシミュレーションデータ操作コードを自動的に挿入します

私はデータベースツールとして Navicat を使用しています。他のものも同様です。 1. Navi...

Enterキーを押すとフォームが自動的に送信されます。予期せぬ発見

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

CSS ファイルをインポートする 4 つの方法 (インライン、インライン、外部、インポート) の詳細な説明

CSS インポート方法 - インラインスタイルタグ属性を通じて、CSSのキーと値のペアがタグに直接書...

doctype のマークアップ検証

しかし最近、この方法を使用すると問題が発生することがわかりました。コードを参照してください。コードを...

MySQL マルチテーブルクエリ例の詳しい解説 [リンククエリ、サブクエリなど]

この記事では、例を挙げて MySQL のマルチテーブル クエリについて説明します。ご参考までに、詳細...

JavaScript でシンプルなタイマーを実装する

この記事では、参考までに簡単なタイマーを実装するためのJavaScriptの具体的なコードを紹介しま...

SQL Server コメントのショートカット キー操作

SQL Server のバッチコメントバッチ注釈Ctrl + (K, C): Ctrlキーを押しなが...

不規則な投影を実現するためのボックスシャドウとドロップシャドウのサンプルコード

border-radius で生成できる四角形やその他の図形に影を追加する場合 (「Adaptive...

Linuxがすべてのコマンドをサポートしていない問題の解決策

Linux がすべてのコマンドをサポートしていない場合はどうすればいいですか?すべてのLinuxコマ...

MySQL で 2 つのテーブルをクエリする場合の from と join の違いの概要

序文MySQL では、複数テーブル結合クエリは非常に一般的な要件です。複数テーブルクエリを使用する場...

Docker と Intellij IDEA の融合により、Java 開発の生産性が 10 倍向上

目次1. 開発前の準備2. 新しいプロジェクトIdea は Java 開発のための強力なツールであり...

ウェブデザインで注意すべき検索最適化の知識

1. 新サイトホームページのリンクレイアウト1. リンク配置の位置:リンク配置の位置によって、リンク...

Vueカスタムディレクティブの詳細

目次1. 背景2. ローカルカスタム指示3. グローバルカスタム指示4.1 カスタムコマンドフック関...

meta name="" content="の機能の詳細な説明

1. 文法: <meta name="名前" content="...

ノードをMySQLデータベースに接続する際に発生する問題と解決策

今日、MySQL の新しいバージョン (8.0.21) をインストールしましたが、ノード フレームワ...