SEが教えるEC運営のブログ ウェブ運用と開発現場を経験したSEの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の中の変数をダブルクオーテーションで囲まないと、コマンドとして認識されてしまうので、うまくいかないのでご注意を。

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

×

メルマガ登録

SEが商品登録、在庫管理、発注などのEC業務を効率よくプログラムで実施する方法を無料配信します。

  • APIやツールによる業務効率化
  • 広告運用に関するTips
  • CVRを改善するアクセス解析のコツ
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
Web運用の経験もあり、アクセス解析、広告運用が得意で、広告APIとプログラムとの合わせ技で並の広告代理店にはできない提案が可能です。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP