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コンテナを停止および削除できない問題の解決策

推薦する

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...

Springboot+Vue-Cropperでアバターの切り取りとアップロードの効果を実現

アバターをアップロードするにはVue-Cropperコンポーネントを使用します。参考までに具体的な内...

Nginx 環境での WordPress マルチサイト構成の詳細な説明

WordPress のマルチサイト機能を使用すると、1 つの WordPress プログラムをインス...

Vue ショッピングカートのケーススタディ

目次1. ショッピングカートの例2. コードの実装3. まとめ1. ショッピングカートの例一連の学習...

Centos7.5 は mysql5.7.24 バイナリ パッケージの展開をインストールします

1. 環境整備:オペレーティング システム: CentOS Linux リリース 7.5.1804 ...

MySQL の日付と時刻の加算と減算のサンプル コード

目次1.MySQLは時間間隔を加算または減算します2. 日付を減算する最近、MySQL を見直してい...

Ubuntu 18.04 に phpMyAdmin をインストールするための詳細なチュートリアル

Ubuntu 18.04 上の Apache で動作するように phpMyAdmin をインストール...

Linux での JDK のインストール (OpenJDK のアンインストールを含む) の概要

1. openjdkを表示する rpm -qa|grep jdk 2. openjdk を削除します...

JS+Canvas でダイナミックな時計効果を実現

参考までに、Canvas をベースにしたダイナミッククロックのデモを用意しました。具体的な内容は次の...

Linux で PHP curl 拡張機能をインストールする方法の詳細な説明

この記事では、Linux で PHP curl 拡張機能をインストールする方法について説明します。ご...

Ubuntu 18.04にmysql5.7をインストールする

Ubuntu 18.04では参考までにmysql 5.7をインストールします。具体的な内容は以下のと...

MySQL で誤って削除したテーブル データを回復する方法 (必読)

バックアップがあれば、非常に簡単です。最新のバックアップ データを生成し、mysqlbinlog を...

Linux でディスクをマウントし、起動時に自動的にマウントするように設定する方法

皆さんの時間は貴重だと承知しているので、プロセス コマンドを直接書き留めておきます。設定できます。原...

MySQL 5.7 のスロークエリログの時間がシステム時間より 8 時間遅れている理由の詳細な説明

遅いクエリをチェックすると、時間が正しくなく、システム時間とちょうど 8 時間異なっていることがわか...