2013/08/30

[Windows]監視スクリプトを書いてみた(5/5) MySQLレプリケーション監視

ApacheやらMySQLのサービスが落ちてないかなどを監視するのを自分でチェックして異常があったら発報する仕組みが必要だと思ってました。
サードパーティに頼らず、WindowsOSの機能だけで作ってみたかったので、ほぼVBScriptだけでくみ上げてみました。

そんなマゾヒズム感全開なエントリがこちらです。

今回は第5回です。
  1. 処理フロー
  2. メール送信
  3. サービス監視
  4. ポート監視
  5. MySQLレプリケーション監視(今回)




.

内容

MySQLのレプリケーションのスレーブのステータスを確認します。
MySQLのインスタンスとして問題なくてもレプリケーションの動作だけおかしいという場合はありえる話で、参照はできるけど実は2時間前にレプリケーションが止まっていて2時間前のデータを見ているなんてことも起こりうるということです。
なので特にスレーブステータスのエラーや遅延秒数をチェックします。


使い方

前回のサービス監視とほぼ同じですがこのスクリプトは可変な変数が多いため、引数をとりません。
下のVBScriptと第2回で紹介したsendMail.vbsを同じディレクトリに置き、さらにバッチファイルを置いて以下のように記述します。
Call watchReplication.vbs
ポート番号他の各設定値はスクリプト内に記載します。
複数のスレーブインスタンスを監視したい場合は、ファイル名を変えて以下のようにすればよいでしょう。
Call watchReplication_3307.vbs
Call watchReplication_3308.vbs


ポイント

今回使うコマンドは(3307ポートの場合)
mysql -P3307 -umysql_user -pmysql_pass -e"SHOW SLAVE STATUS\G"
です。
これを分解すると、
-P ポート指定
-u ユーザー名指定
-p パスワード指定
-e SQL文指定
オプションの後ろは余白が要りません。特に-pの後ろは余白があるとその余白もパスワードの一部と誤認してしまうので注意が必要です。
また、5.6.10以降は-pオプションを使用すると「Warning: Using a password on the command line interface can be insecure.」が出ます。
(Warningが出ても今回の内容の目的は果たせますが、セキュアにしたい方、Warningを出したくない方はそれなりの対処をしてください。方法の説明はここでは省略します。)
SQL文のデリミタは;ではなく\Gをつけてフィールドごとに行で出力させるようにします。

そしてこの出力の中で以下の項目をチェックします。
Slave_IO_State
「Waiting for master to send event」かどうか
Slave_IO_Running
「Yes」かどうか
Slave_SQL_Running
「Yes」かどうか
Last_Error
(空)かどうか
Last_IO_Error
(空)かどうか
Seconds_Behind_Master
指定した数値以下かどうか
※Seconds_Behind_Masterの上限値として変数に値を入れますが、このスクリプトが実行したときのステータス値しかチェックできません。
日常の上限値ではありませんのでご注意ください。





冗長なコード

さて、このシリーズを毎回まじめに読まれた奇特な方は、VBScriptのコードが少し、いやかなり冗長で無駄が多いように思われたかもしれません。
私なりに整理した結果こうなっているのですが、その言い訳はまた別の機会に。


.

0 件のコメント:

コメントを投稿