mysqlデータベースモニタリング

4104 ワード

>オフラインではオンライン環境のテストをシミュレートするため、オンラインでのテストサーバにもクラスタ環境を導入しました.クラスタ環境では最初にいくつかのデータが作成されましたが、テスト中に汚れたデータの発生とテスト担当者への誤導を避けるために、最新の汚れたデータを含まないいくつかの内容で定期的なバックアップと返信を行います.クラスタ環境では、データのリカバリは時間と繰り返しの作業であり、自動化を考慮して実現されます.だから自分でシナリオを書きます.計画は、mysqlデータベースのモニタリング、すなわち環境チェック、現在のサーバのmysqlステータスのチェックの2つのスクリプトに分けられます.2つ目:mysql自動リカバリ.リカバリに成功したら、ステータスを確認し、環境に問題がある場合は自動的に解決します.>
方法1 netstat-lanp|grep tcp|grep 3306|wc-l方法2/usr/bin/lsof-i:3306|wc-l方法3 mysql-uユーザー名-pパスワード-e"select version();’ &>/dev/null echo $? 判断戻り値メソッド4 ps-ef|grep mysql|grep-v grep|wc-l//プロセス判断を利用する場合、文をスクリプトに置くと、スクリプトの名前にMysqlの文字が含まれなくなります.そうしないと、スクリプトもgrepしてしまうため、結果が正確ではありません.
注意:>/dev/null 2>&1は、標準出力が空のデバイスファイルにリダイレクトされることを示します.つまり、端末に何も出力されません.はっきり言って、何も表示されません.$?前のコマンドが実行された状態を表し、実行に成功すると0になります.
コードは次のとおりです.
#!/bin/bash
status=`/etc/init.d/mysqld status|grep running|wc -l`
process=`ps -ef |grep mysqld|grep -v grep|wc -l`
port=`lsof -i:3305|grep -i listen|wc -l`
IP_now=$(ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:")
colony="200.200.169.10"
result=$(echo $IP_now | grep "${colony}")
mysql -uroot -psangfordb-e "show databases;" >/dev/null 2>/dev/null
a=$?
if [ $a -eq 0 ] && [ $port -ne 0 ] && [ $process -ne 0 ] && [ $status -ne 0 ]
then
    echo "mysql is running" 
else 
    echo "mysql is not running"
        /etc/init.d/mysqlaccd stop
    if [[ "$result" != "" ]]
    then
        echo "  hosts"                   #       ,   ,   hosts  
                echo "$IP_now"
        sed -i "s/^.*workflowdb     .*$/$IP_now workflowdb     /" /etc/hosts
        sed -i "s/^.*reimbursedb     .*$/$IP_now reimbursedb     /" /etc/hosts
        sed -i "s/^.*storedb     .*$/$IP_now storedb     /" /etc/hosts
                echo "  hosts    "
    fi
        echo "  mysql" 
    /etc/init.d/mysqld restart

fi