MySQLインスタンスが起動できない問題の分析と解決

MySQLインスタンスが起動できない問題の分析と解決

序文

数日前、友人がWeChatで私に連絡してきて、マシンがダウンタイムから復旧した後、本番データベースインスタンスが起動に失敗し、そのインスタンスには高可用性、災害復旧、バックアップ機能がないため、ビジネスに大きな影響が出ていると教えてくれました。彼は私が調査を手伝ってくれることを期待していたので、私はすぐに調査に参加しました。

シナリオ分析

(1) まずエラーログを確認します。エラーメッセージは非常に明確です: 「ログファイルを開けませんでした」。ログファイルを開けません。

2021-01-06 13:23:51 20464 [エラー] ログを開けませんでした (ファイル '何かが明らかに間違っており、失敗する可能性があります。'、errno 2)
2021-01-06 13:23:51 20464 [エラー] ログファイルを開けませんでした
2021-01-06 13:23:51 20464 [エラー] tc ログを初期化できません
2021-01-06 13:23:51 20464 [エラー] 中止しています

(2) 上記のエラーが表示された後、my.cnf の設定が正しいか、ログ ディレクトリとアクセス許可が正しいかを確認する必要がありますが、問題は見つかりませんでした。

# my.cnf を少なくする
データディレクトリ=/var/lib/mysql
ログ bin = mysql bin
リレーログ=リレービン

# ls -lrt
-rw-rw---- 1 mysql mysql 1073761373 1月4日 06:18 mysql-bin.007351
-rw-rw---- 1 mysql mysql 1073755587 1月4日 09:26 mysql-bin.007352
-rw-rw---- 1 mysql mysql 1073777045 1月4日 12:07 mysql-bin.007353
-rw-rw---- 1 mysql mysql 1073742801 1月4日 15:12 mysql-bin.007354
-rw-rw---- 1 mysql mysql 1074087344 1月4日 18:13 mysql-bin.007355
-rw-rw---- 1 mysql mysql 1073869414 1月4日 21:32 mysql-bin.007356
-rw-rw---- 1 mysql mysql 1073771900 1月5日 00:16 mysql-bin.007357
-rw-rw---- 1 mysql mysql 213063247 1月5日 01:00 mysql-bin.007358
-rw-rw---- 1 mysql mysql 1073753668 1月5日 02:11 mysql-bin.007359
-rw-rw---- 1 mysql mysql 671219722 1月5日 03:31 mysql-bin.007360
-rw-rw---- 1 mysql mysql 1073774928 1月5日 07:34 mysql-bin.007361
-rw-rw---- 1 mysql mysql 1073845285 1月5日 11:33 mysql-bin.007362
-rw-rw---- 1 mysql mysql 1073756444 1月5日 15:37 mysql-bin.007363
-rw-rw---- 1 mysql mysql 1073790555 1月5日 19:37 mysql-bin.007364
-rw-rw---- 1 mysql mysql 1073768027 1月5日 23:59 mysql-bin.007365
-rw-rw---- 1 mysql mysql 311398643 1月6日 01:00 mysql-bin.007366
-rw-rw---- 1 mysql mysql 1071242043 1月6日 03:31 mysql-bin.007367
-rw-rw---- 1 mysql mysql 1010516229 1月6日 07:27 mysql-bin.007368
-rw-rw---- 1 mysql mysql 1651 1月 6 07:27 mysql-bin.index
-rw-rw---- 1 mysql mysql 1073741824 1月6日 12:08 ib_logfile1
-rw-r--r-- 1 mysql mysql 183 1月6日 13:23 VM_58_10_centos-slow.log
-rw-rw---- 1 mysql mysql 1073741824 1月6日 13:23 ib_logfile0
-rw-rw---- 1 mysql mysql 7492941 1月6日 13:23 VM_58_10_centos.err

(3) エラーメッセージには非常に奇妙な点があります: ファイル「何かが間違いなく間違っており、失敗する可能性があります。」ログファイル名がなぜそんなに奇妙なのでしょうか?ここで知っておく必要があるのは、mysql-bin.index が binlog 関連の情報を記録することです。MySQL インスタンスを起動したら、このファイルを読み取って情報を取得する必要があります。次に、ファイルをチェックして、確かに問題があることを確認します。mysql-bin.index の後半は、エラー ログの内容を誤って書き込んでおり、インスタンスが起動時にエラーの内容 (binlog ログ ファイルとして扱われる) を読み取り、エラーの失敗を報告します。

# cat mysql-bin.index 
./mysql-bin.007351
./mysql-bin.007352
./mysql-bin.007353
./mysql-bin.007354
./mysql-bin.007355
./mysql-bin.007356
./mysql-bin.007357
./mysql-bin.007358
./mysql-bin.007359
./mysql-bin.007360
./mysql-bin.007361
./mysql-bin.007362
./mysql-bin.007363
./mysql-bin.007364
./mysql-bin.007365
./mysql-bin.007366
./mysql-bin.007367
./mysql-bin.007368
23:27:31 UTC - mysqld はシグナル 6 を取得しました。
これはバグに遭遇したためかもしれません。また、このバイナリが
または、リンクされているライブラリの1つが破損しているか、不適切に構築されているか、
または構成が誤っています。このエラーは、ハードウェアの故障によっても発生する可能性があります。
役立つ情報を集めるために全力を尽くします
問題を診断するが、すでにクラッシュしているので、 
何かが間違いなく間違っており、失敗する可能性があります。

キーバッファサイズ=16777216
読み取りバッファサイズ=3145728
最大使用接続数=523
最大スレッド数=800
スレッド数=522
接続数=522
mysqldは最大で 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 9037821 K バイトのメモリ
大丈夫だと思いますが、そうでない場合は、方程式内のいくつかの変数を減らしてください。

スレッドポインタ: 0x0
バックトレースを試行しています。次の情報を使用して調べることができます。
mysqldが死んだ。その後にメッセージが表示されない場合は、何かが起こった可能性があります。
ひどく間違っています...
スタックボトム = 0 スレッドスタック 0x40000
http://dev.mysql.com/doc/mysql/en/crashing.htmlのマニュアルページには、
クラッシュの原因を突き止めるのに役立つ情報。

(4) 原因を特定した後、解決策はmysql-bin.indexファイルをバックアップし、手動で修復してからインスタンスを正常に起動することです。

# ./mysql スタート
MySQL を起動しています.... 成功しました! 
mysql 接続を確認しています: 接続正常です!

# ps -ef | grep mysqld
ルート 22955 1 0 13:30 pts/5 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/VM_58_10_centos.pid
mysql 23733 22955 24 13:30 pts/5 00:00:05 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/VM_58_10_centos.err --open-files-limit=20000 --pid-file=/var/lib/mysql/VM_58_10_centos.pid --socket=/var/lib/mysql/mysql.sock --port=3306
ルート 32075 14929 0 13:30 pts/5 00:00:00 grep mysqld

要約する

この時点で問題は解決しました。なぜエラーログの内容がmysql-bin.indexに書き込まれるのかについて、個人的にはクラッシュによりファイルが乱れている(ホストマシン上の他の仮想マシンのファイルシステムが破損している)のではないかと疑っています。最後に、本番システムを真剣に受け止める必要があり、バックアップ、高可用性、災害復旧はすべて不可欠であることを強調する必要があります。

上記は、MySQLインスタンスを起動できない問題の詳細な分析と解決策です。MySQLインスタンスを起動できないことの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL の起動オプションとシステム変数の例の詳細な説明
  • MySQLの起動と接続方法の例分析
  • CentOS 7.0 (mysql-5.7.21) で複数の MySQL インスタンスを起動する方法
  • MYSQL スロークエリとログの例の説明
  • MySQL で結果を選択して更新を実行する例のチュートリアル
  • あるテーブルからバッチデータをクエリし、それを別のテーブルに挿入する MySQL の完全な例
  • Springboot は MySQL 接続サンプルコードを設定します
  • MySQLで大きなテーブルを正常に削除する方法の詳細な説明
  • MySQL トリガーの使用シナリオとメソッドの例
  • MySQL でコミットされていないトランザクションを見つけるための SQL の例の簡単な分析

<<:  CSS3 3Dクールキューブ変形アニメーションの実装

>>:  Dockerコンテナを停止および削除できない問題の解決策

推薦する

JS addEventListener() およびattachEvent() メソッドは登録イベントを実装します

JavaScript の DOM イベント モデルでは、オブジェクトの addEventListen...

ベスト HTML/CSS デザインおよび開発フレームワーク 15 選を紹介します

プロフェッショナルな Web デザインは複雑で時間がかかります。 HTML と CSS フレームワー...

js を使用して QR コードを生成するサンプル コード

以前、プロジェクトでQRコードをスキャンして情報を表示する機能を開発する必要がありました。インターネ...

DockerはRedisを起動し、パスワードを設定します

RedisはRedisバージョン5のapline(Alps)イメージを使用します。これは小さくて高速...

Vue でのカスタムディレクティブの基本的な使用方法

目次序文文章1. グローバル登録2. 部分登録3. フック機能とパラメータ設定4. 柔軟な使い方(1...

React 国際化 react-i18next の詳細な説明

導入react-i18next は、 i18nextをベースにした強力な国際化フレームワークです。 ...

スクロールバーのスタイルを設定するための CSS サンプルコード

スクロール バーのスタイルを設定するための CSS 実装コードは次のとおりです。 •::-webki...

CSS導入方法4つのまとめ(共有)

1. インライン参照:ラベルに直接使用されるが、メンテナンスコストが高い スタイル='フォ...

MySQL における楽観的ロック、悲観的ロック、MVCC の包括的な分析

序文データベースの実際の使用では、データの書き込みや読み取りを同時に行わないことが必要な状況によく遭...

iframeを使用してページを呼び出すとページがキャッシュされるかどうかの簡単な分析

最近、毎日変更されるページを iframe を使用して呼び出す必要があるプロジェクトがあります。その...

React Routerの歴史について簡単に説明します

React Router を理解したいなら、まず歴史を理解する必要があります。より具体的には、Rea...

HTTP および HTTP コラボレーション Web サーバー アクセス フロー図

Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...

Mysql の読み取り/書き込み分離期限切れに対する一般的な解決策

MySQLの読み書き分離の落とし穴読み取りと書き込みの分離の主な目的は、メイン データベースの負荷を...

Ubuntu での Subversion (SVN) の詳細なインストールと設定

ソフトウェア開発者であれば、Subversion に精通している必要があります。 Subversio...

検索エンジンのウェブサイトの入り口の無料コレクション

1: Baiduウェブサイトログイン入口ウェブサイト: http://www.baidu.com/s...