« Back to Home

MySQLのレプリケーションを監視するシェルスクリプト

SHOW SLAVE STATUSG でスレーブの状態をチェックして、問題がありそうな場合はメールを送信するスクリプトのメモです。

意図としては、

ちなみにMySQLそのものに接続できないとかの場合はこのスクリプトでは対応できません。

#! /bin/sh
#
# watch replication
#

ALERT_TO="{mail-destination}";
ALERT_SUBJECT="[MySQL] replication alert";

CHECK_COMMAND="SHOW SLAVE STATUS\G";
ALLOW_DELAY_SECONDS=30;

echo "$CHECK_COMMAND";
slave_status=`mysql -u {user} -e "$CHECK_COMMAND"`;
echo "$slave_status";

# set variables from status
eval "`echo "$slave_status" | sed -ne 's/: (.*)/="1"/p'`";

if [ "$Slave_IO_Running" != "Yes"  ]; then
    msg="Slave_IO_Running : $Slave_IO_Runningn";
fi

if [ "$Slave_SQL_Running" != "Yes" ]; then
    msg="${msg}Slave_SQL_Running : $Slave_SQL_Runningn";
fi

if [ "$Last_Errno" != "0" ]; then
    msg="${msg}Last_Error : [${Last_Errno}] $Last_Errorn";
fi

if [ "$Seconds_Behind_Master" -gt $ALLOW_DELAY_SECONDS ]; then
    msg="${msg}Seconds_Behind_Master : $Seconds_Behind_Mastern";
fi

if [ "$msg" != "" ]; then
    echo "n-- Need alert mail --";
    echo "$msg";
    (echo "${msg}n${CHECK_COMMAND}n${slave_status}" | mailx -s "$ALERT_SUBJECT" "$ALERT_TO");
fi