リモートmysqlが実行中かどうかを確認する

リモートmysqlが実行中かどうかを確認する

リモート サーバー上の mysql が実行中かどうかを確認するために、cron ジョブを使用して実行できる bash シェル スクリプトが必要です。実行中の場合は何もせず、それ以外はサーバーを起動します。

cronjob は、リモート サーバーでライブ (または非ライブ) mysql を 1 分ごとにチェックします。cron ジョブは自分で作成できますが、リモート mysql が起動しているか停止しているかをチェックするシェル スクリプトについてサポートが必要です。起動しているか停止しているかをチェックした後の応答は重要ではありません。ただし、チェックは重要です。

ありがとう。

答え1

mysqld接続するにはmysql管理者

MySQLのドキュメントには、mysqladmin ping

サーバーが利用可能かどうかを確認します。サーバーが実行中の場合は、mysqladmin からの戻りステータスは 0 になり、実行されていない場合は 1 になります。アクセス拒否などのエラーの場合でも、サーバーは実行中だが接続を拒否したことを意味するため、0 になります。これは、サーバーが実行中でない場合とは異なります。

まず、権限のないユーザーを作成します

mysql> GRANT USAGE ON *.* TO ping@'%' IDENTIFIED BY 'ping';

このようなスクリプトを作成します

#!/bin/bash

MYSQL_USER=ping
MYSQL_PASS=ping
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
mysqladmin ping ${MYSQL_CONN} 2>/dev/null 1>/dev/null
MYSQLD_RUNNING=${?}
if [ ${MYSQLD_RUNNING} -eq 1 ]; then service mysql start ; fi

必要に応じてそのスクリプトをcrontabに配置します

ping@'%' が接続できるように、ファイアウォールが 3306 で開いていることを確認してください。

答え2

確認は次のように簡単です:

mysql -e "select 1" || echo down

サービスを開始するために、echo を root への ssh コマンドに置き換えることもできますが、少しリスクがあるようです。セキュリティに影響する可能性があります。信頼性が低い可能性があります。これを行うには、適切なクラスター/フェイルオーバー ソフトウェアを使用することをお勧めします。MySQL MMM があり、以前は使用していましたが、現在は使用されなくなったと聞いています。

答え3

リモートマシンへのルートユーザーのパスワードなしログインにsshkey認証を使用すると仮定すると、次のコマンドを実行できます。

ssh remotemysql "if [ 'ps -efww | grep mysql| grep -v grep' ]; then echo "サーバーは起動しています" ; else echo "サーバーはダウンしています"; fi"

echo "server is down" を mysql 起動スクリプトに置き換えます。/etc/init.d/mysqld start のように記述します。

答え4

リモート サーバー上の MySQL が実行中かどうかを確認するために、cron ジョブを使用して実行できる bash シェル スクリプトが必要です。

これは私を不安にさせます。なぜこれがサービス管理の良い方法だと考える人がいるのか想像できません。Mysql には、Linux/Unix システムでサービスを起動する標準的な方法である systemd および sysvinit と統合する起動スクリプトが同梱されています。systemd には、失敗したサービスを再起動する機能が組み込まれていますが、非常に明白な理由からこのオプションを実行するデフォルト構成を見たことはありません。そうする正当な理由があれば、sysV システム上の inittab からの再生成で呼び出すことができます。これが DBMS のユーザーごとのインスタンスの実行 (Kmail のように) に関連する場合、トリガーリングは cron ではなくユーザー セッションによって制御される必要があります。

しかし、質問の正当性はさておき、mysql または mysqladmin を使用してサービスの状態を監視すると、データベースに接続するための資格情報が公開されることになります。これは、セキュリティの観点からはあまり良い考えではありません。また、リソース管理に関する複雑さも生じます (接続が最大になると、サービスがダウンしているように見える場合があります)。

サービスが実行されているかどうかは、次の場所から確認できます。

  • 'ps' の出力または /proc ファイルシステムに mysqld プロセスが存在する
  • 関連するポートのリスニングソケット(netcat を使用して調査するか、netstat の出力から検出できます)

関連情報