Shellスクリプトは、MySQLの主従同期を監視することを実現します。


コードは以下の通りです

#!/bin/bash
#check MySQL_Slave Status
#crontab time 00:10
MYSQLPORT=`netstat -na|grep "LISTEN"|grep "3306"|awk -F[:" "]+ '{print $4}'`
MYSQLIP=`ifconfig eth0|grep "inet addr" | awk -F[:" "]+ '{print $4}'`
STATUS=$(/usr/local/webserver/mysql/bin/mysql -u yuhongchun -pyuhongchun101 -S /tmp/mysql.sock -e "show slave status\G" | grep -i "running")
IO_env=`echo $STATUS | grep IO | awk  ' {print $2}'`
SQL_env=`echo $STATUS | grep SQL | awk  '{print $2}'`
DATA=`date +"%y-%m-%d %H:%M:%S"`
if [ "$MYSQLPORT" == "3306" ]
then
  echo "mysql is running"
else
  mail -s "warn!server: $MYSQLIP mysql is down" [email protected]
fi
if [ "$IO_env" = "Yes" -a "$SQL_env" = "Yes" ]
then
  echo "Slave is running!"
else
  echo "####### $DATA #########">> /data/data/check_mysql_slave.log
  echo "Slave is not running!" >>    /data/data/check_mysql_slave.log
  echo "Slave is not running!" | mail -s "warn! $MYSQLIP MySQL Slave is not running" [email protected]
fi
10分ごとに運行することをおすすめします。

*/10 * * * * root /bin/sh /root/mysql_slave.sh
各MySQLにyuhongchunのユーザを割り当てることを覚えています。権限が大きくても大丈夫です。ローカルでのみ運行します。下記の通りです。

grant all privileges on *.* to "yuhongchun"@"127.0.0.1" identified by "yuhongchun101";
grant all privileges on *.* to "yuhongchun"@"localhost" identified by "yuhongchun101";
スクリプトの設計構想:
1、このスクリプトは様々な国内外のネットワーク環境、すなわちIPの異なる環境に適応できるはずです。
2、脚本もついでにMySQLが正常に動作しているかを監視してもらいます。
3、SlaveマシンのIOとSQLの状態はいずれもYESでなければなりません。一つでも欠けています。ここで多重条件判定-aを使いました。
スクリプトの背景:
私は多くの公共ネットワーク型のウェブサイト(ハードファイアウォールがなく、直接IDCマシンルームに置く)に基づいて作ったのはMySQLのメインフレームであり、主にマシンからデータベースのバックアップと冷バックアップの役割を果たしています。このようなウェブサイトは数十個あります。もし一つの手動の検査では、毎日時間がかかります。だから、スクリプトコントロールをして、上記のようなスクリプトを設計しました。
スクリプトの実践:
このスクリプトはすでに生産環境に使われています。皆さんはMySQLマシンから監視カメラに置いてもいいです。また、手動でチェックする場合もありますが、rsync-deleteが自動的にデータを削除していることが分かりました。つまりデータベースの位置からスクリプトがアラームがありません。
後期のアプリケーション:
後期会社のMySQLデータベースは、主から一つの色にアップグレードし、読み、書き分けの仕組みにし、LVSはデータベースからの負荷分散器として用意されています。このスクリプトは自動的にMySQLのreplication状態から監視されます。同期できないと自動的にマイSQLサービスをオフし、ウェブサイト全体の正常な業務アクセスに影響を与えません。もちろん、シナリオの実行周期も必ず変更します。10分から秒に変えます。これはwhileループで実現できます。