このようなシェル スクリプトを使用して、多数の MySQL データベースを強制終了します (推奨)

このようなシェル スクリプトを使用して、多数の MySQL データベースを強制終了します (推奨)

朝早くに電話で起こされました。あるプロジェクトのデータベースがダウンしていて起動できないとのことでした(寝すぎでアラームのテキストメッセージは聞こえませんでした)。とても怖かったです!

電話の相手は、MySQLデータベースのマスターデータベースはすべて起動できないが、スレーブデータベースは正常だと言っていました。マスターデータベースが他のAlibaba Cloudマスターデータベースに接続しているのではないかと疑われました。これらのデータベースは以前に Alibaba Cloud から IDC のコンピュータ ルームに移行されていたため、彼はこのような判断を下しました。

すぐにコンピュータの電源を入れ、***に接続し、データベースサーバーの1つにログインし、次のコマンドを実行してmysqlサービスを開始してみます。

[root@bbsmysql121 バックアップ]#mysqld_safe –user=mysql &

起動に失敗し、別のデータベース サーバーを試しましたが、それでも失敗しました。すべてのデータベースを起動できないことを考慮すると、問題はデータベース ホストの問題によって発生している可能性があると暫定的に判断できます。

データベースの基本的な設計は、仮想化された 2 つの物理ノードと、バックアップ用の 1 つの物理マシンです。 1 台の物理マシン上のすべての仮想マシンは MySQL マスター データベースとして使用され、別の物理マシン上の仮想マシンは MySQL スレーブ データベースとして使用されます。

仮想マシンでのトラブルシューティングをあきらめて、すぐにホスト システムにログインします。次に、2 つの側面から問題のトラブルシューティングを行います。

ü 仮想化されたバックエンド管理システム

ストレージがいっぱいで問題が深刻であることが判明しました。

ü ホストシステム debian への SSH ログイン

[6885005.756183] デバイス dm-16 のバッファ I/O エラー、論理ブロック 34667776、非同期ページ書き込みの損失
[6885005.757292] デバイス dm-16 のバッファ I/O エラー、論理ブロック 34667792、非同期ページ書き込みの損失
[6885005.758210] デバイス dm-16、論理ブロック 34667808 でバッファ I/O エラーが発生し、非同期ページ書き込みが失われました
[6885005.759079] デバイス dm-16、論理ブロック 34667824 でバッファ I/O エラーが発生し、非同期ページ書き込みが失われました
[6885005.759922] デバイス dm-16、論理ブロック 34667840 でバッファ I/O エラーが発生し、非同期ページ書き込みが失われました
[6885005.760723] デバイス dm-16 のバッファ I/O エラー、論理ブロック 34667856、非同期ページ書き込みの損失

システム ログ /var/log/messages に多数のディスク IO エラーが見つかりました。

上記の調査結果に基づいて、基本的にはディスクに問題があると結論付けることができます。1 つの問題は、proxmox によって割り当てられたストレージ領域がいっぱいであることであり、もう 1 つはディスク IO エラーです。問題がわかったら、エラーを修正するか、スレーブ データベースをマスター データベースに昇格するという 2 つの解決策があります。スタンバイの問題を考慮すると、マスター データベースの修復に最善を尽くす必要があります。修復できない場合は、2 番目の解決策 (スレーブ データベースの昇格) を使用できます。

ディスクスペースを解放する

ディスク容量がいっぱいになるのはなぜですか?誰かが仮想マシン上で何か操作を行った可能性があり、各仮想マシンが同じ操作を実行したために、ホスト マシンのディスク領域がすぐにいっぱいになった可能性があります。 MySQLデータベースを実行している仮想マシンにログインし、コマンドを実行します。

df-h

他のサーバーにログインすると、パーティション /dev/sdb1 も 90% 以上使用されています。ディレクトリ /data に入り、次のコマンドを実行してディレクトリのスペース使用量を表示します。

[root@cumysql121 データ]# du -hs *
4.0K バックアップ
59G db_pkg
59G mysql_db
[root@cumysql121 データ]# cd バックアップ
[root@cumysql121 バックアップ]# du -hs *

なんと、50G を超えるディレクトリがいくつもあります (この記事を書いているときに削除したので、記録は残っていません)。ディレクトリ名から判断すると、これらのファイルはバックアップ データベースによって自動的に生成されたものと思われます。無視して、まず削除してください。

誰かがシステム内で自動タスクを実行したに違いありません。crontab –l コマンドで確認したところ、次のことがわかりました。

#!/bin/bash
/usr/local/xtrabackup/bin/innobackupex --defaults-file=/etc/my.cnf --user=root --passwor='+N4dohask+MsLhG' /data/backup/
/data/backup/* -mtime +1 -exec rm -fr {} \; を検索します。

一見すると、このスクリプトには何の問題もありません。しかし、よく見ると、最後の行に「~」記号があることがわかります。何かが間違っています。スクリプトを書いた人の意図は、ディスクがいっぱいにならないように、データベースを 1 日に 1 回バックアップし、前日の履歴バックアップ データを削除することでした。

しかし、ここでは 2 つの致命的な問題について説明します。

バックアップ戦略エラー

専用のバックアップ システムがあり、ローカル バックアップではなくこのシステムにデータをバックアップする必要があります。

間違った手段

バックアップ スクリプトが記述されたら、手動で実行してその正確性を確認する必要があります。書いた後にそのままそこに放り込むのではなく。

ディスクエラーを修復する

緊急にコンピュータ室に連絡し、技術者に KVM をホスト マシンに接続するよう依頼してください。システムを起動できない場合は、リモートでシステムを表示するか、シングル ユーザー モードに入って fsck などの修復操作を実行できます。

SSH を使用してホスト システムの Debian に接続し、ディスク領域がすべて解放されたことを確認してから、reboot を実行してシステムを再起動します。数分後、システムが正常に起動します。

その後の操作

システム ログを確認すると、ディスク IO エラーはなく、ディレクトリとファイルの作成は正常であり、各仮想マシンの起動とその上のデータベースの起動はすべて正常です。

すべての関係者に通知し、ビジネスの観点からすべてが正常かどうかを確認します。しばらくすると、テキストメッセージでたくさんの回復メッセージが届き、とても安心しました。言うまでもなく、これを実行したのはプロジェクトの SA であり、誰にも通知しませんでした。

彼に個人的に伝え、他の人にも説明するよう頼んでください。将来何か危険なことをするなら、お互いに知らせ合うのがベストです。

以上が私が紹介した内容です。このようなシェル スクリプトを使用して、多数の MySQL データベースを強制終了する方法です。お役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQL マスター/スレーブ ステータスを監視するシェル スクリプト
  • シェル スクリプトを使用してワンクリックで MySQL 5.7.29 をインストールする方法
  • MySQLの一般的なバックアップコマンドとシェルバックアップスクリプトの共有
  • MySQL データベースのデータを定期的にバックアップし、指定した期間保持するシェル スクリプト
  • シェル スクリプトは、仮想マシンの基本構成の作成を自動化します: tomcat--mysql--jdk--maven
  • MySQL のスケジュールされたバックアップ、削除、および回復機能を実装するシェル スクリプト
  • 各Mysqlテーブルの行数を正確にカウントする小さなシェルスクリプト
  • シェルスクリプトを使用して、サーバー上にMySQLデータベースアカウントを一括作成します。
  • シェルスクリプトを使用してMySQLにインデックスを追加する方法
  • シェル スクリプトを使用して複数の MySQL データベースを毎日自動的にバックアップする方法
  • MySQL Shellの紹介とインストール

<<:  Vueはリストのシームレスなスクロールを実装します

>>:  Linux での nginx のインストール、展開、使用方法の詳細な説明

推薦する

MySQL 5.7.11 zip インストールと設定方法のグラフィックチュートリアル

1. MySQL 5.7.11 zipインストールパッケージをダウンロードするこのマシンはwin7 ...

Linuxはnode.jsを完全に削除し、yumコマンドで再インストールします。

最初のステップ組み込みのパッケージ管理機能で一度削除する yum 削除 nodejs npm -y ...

Angularの単一プロジェクトを複数プロジェクトにアップグレードするプロセス全体

目次序文開発環境新しいプロジェクトを作成するモバイルウェブプロジェクト角度付きJSONパブリックモジ...

Excel エクスポートは docker 環境では常に失敗する

Excel のエクスポートは、docker 環境では常に失敗します。最も直接的な原因は、中国語フォン...

さまざまなブラウザに対応するためにCSSで指定フォント@font-faceを導入する際の問題

Web ページを作成するときに、特定のフォントを使用したい場合は、 @font-faceを介して参照...

Apache Flink の任意の Jar パッケージのアップロードにより、リモート コード実行の脆弱性が再発する問題が発生する (脆弱性警告)

脆弱性の説明Apache Flink は、分散ストリームおよびバッチ データ処理用のオープン ソース...

Node8 における AsyncHooks 非同期ライフサイクル

Async Hooks は Node8 の新機能です。NodeJs の非同期リソースのライフサイクル...

Vueのミックスインと継承について詳しく説明します

目次序文ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン継承するミ...

CentOS7 で MySQL のスケジュールされた自動バックアップを実装する方法

実稼働環境で起こる最も嬉しいことは、シナリオによっては、更新または削除時にパラメータを無視せざるを得...

ウェブページを最適化してメモリとCPUの使用率を削減

一部の Web ページは大きく見えなくても開くのに非常に時間がかかる場合があります。一方、他の We...

Vue2.0+ElementUI+PageHelperで実装されたテーブルページング機能

序文最近、いくつかのフロントエンド プロジェクトに取り組んでおり、ページにいくつかのテーブルを表示す...

CSS3で実装されたテキストポップアップ効果

成果を達成する実装コードhtml <div>123WORDPRESS.COM</d...

CSS レスポンシブ レイアウト システムの例コード

レスポンシブ レイアウト システムは、今日の一般的な CSS フレームワークではすでに非常に一般的で...

体験をデザインする: ボタンには何があるか

<br />最近、UCDChina は「インターフェース上のテキストに注意を払う」という...

Ubuntu ターミナル マルチウィンドウ 分割画面 ターミネーター

1. インストールターミネーターの最大の特徴は、1つのウィンドウで複数のターミナルを開くことができる...