Webは用いる人のリテラシーで決まる ウェブ運用と開発現場を経験したエンジニアのTIPS
TOP > BLOG > IT記事

mysqlの死活監視をシェルでシンプルに実装したサンプルコード

早川朋孝 早川朋孝
EC専門のSE

ある案件でデータベースが落ちる事態が頻発したので、データベースの死活監視をシェルで実装した。Zabbixとか色々な監視ツールがあるが、インストールが面倒だったり、設定に手間がかかったり、そこまで大がかりなものは必要ないという場合もあるだろう。

こういうケースを想定して、シェルを書いた。要件は以下の通りいたってシンプルです。

要件

  • サーバー外部からではなく、データベースと同じサーバーから監視する
  • pingをうつだけのシンプルな機能
  • 異常を検知したらメール通知
  • 環境はCentOS7系を前提とする

データベースの入っているサーバーで以下のようなコマンドを打つ。127.0.0.1はローカルIP、****にはデータベースのパスワードが入る。

# mysqladmin -h127.0.0.1 -P3306 -uユーザー名 -p********* ping
$gt; mysqld is alive

問題なければaliveという旨のメッセージが返ってくる。この仕組みを利用して、シェルを書く。

#実行日時を変数に設定
date=`date “+%Y-%m-%d-%H-%M”`

#正常状態のメッセージを設定
state=”mysqld is alive”

#mysqlの死活結果を実行日時をファイル名として保存
mysqladmin -h127.0.0.1 -P3306 -uユーザー名 -p************** ping >> /home/log/sql-$date.log

#実行結果を変数に格納
result=`cat /home/log/sql-$date.log`

#正常な状態のメッセージと実行結果を比較
if [ “$state” = “$result” ]; then
echo “alive”
else
mysqladmin -h127.0.0.1 -P3306 -uユーザー名 -p*************** ping | mail -s ‘sql_check’ ‘メールアドレス
fi

たったこれだけのシンプルなものだけど、簡単な運用には十分だと思う。上記コードをcronで定期実行すれば対応は完了する。少しコードについて補足すると、ifの中の変数をダブルクオーテーションで囲まないと、コマンドとして認識されてしまうので、うまくいかないのでご注意を。

ちなみにエラーを検知したら、自動でデータベースを再起動するコマンドなどを設定してもいいだろう。その辺りの差配は目的や運用状況に応じて自由に設定すればいい。

×
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP