1. 程式人生 > >利用shell指令碼呼叫ansible自動化實現企業備份基本環境

利用shell指令碼呼叫ansible自動化實現企業備份基本環境

QQ截圖20180722000600.png-68.1kB

inotify+rsync實時監控推送NFS掛載目錄指令碼

#!/bin/bash

Path=/data

/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data | while read line
do
        if [ -f $line ];then
                rsync -azP $line --delete [email protected]192.168.200.129::nfs --password-file=/etc/rsync.password
        
else cd $Path rsync -azP ./ --delete [email protected]192.168.200.129::nfs --password-file=/etc/rsync.password fi done

mysql伺服器增備指令碼

#!/bin/bash
name=192.168.200.139
inotifywait -mq --format '%f' -e create,close_write /usr/local/mysql/data | while read line
do
        cd 
/usr/local/mysql/data if [ -f $line ];then mv $line /wbq/"$name"_"$line"_`date +%F-%H-%M-%w` #移動改名,因為檢查指令碼是根據抓IP進行比對MD5sum校驗檔案個數的 cd /wbq && /usr/bin/md5sum "$name"_"$line"_`date +%F-%H-%M-%w` >> md5sum_"$name".txt #生成校驗檔案 rsync -az /wbq --delete [email protected]192.168
.200.129::mysql --password-file=/etc/rsync.password #推送/data這個目>錄到備份伺服器的mysql目錄裡 fi done

mysql伺服器全備指令碼

#!/bin/bash
name=192.168.200.127
lujing="/mysql/mysql_all_$(date +%F-%w).sql"

/usr/local/bin/mysqldump -uroot -p666666 --all-databases > $lujing
cd /mysql
/usr/bin/md5sum $lujing > md5sum.txt
/usr/bin/rsync -az /mysql/* [email protected]::mysql --password-file=/etc/rsync.password
find /mysql/ ! -name "mysql_all_*-1" -type f -mtime +30  | xargs rm -f
cd /usr/local/mysql/data
rm -f mysql-bin.0*

web伺服器自動打包系統重要檔案指令碼

#!/bin/bash
name=192.168.200.128

cd /var/spool/cron && tar jcf /bak/root_"$name"_`date +%F-%H-%M-%w`.tar.bz2 root
if [ $? -ne 0 ];then
        test -d  /var/spool/cron || echo "沒有cron這個目錄!" >> /root/729
fi

cd /var/html && tar jcf /bak/www_"$name"_`date +%F-%H-%M-%w`.tar.bz2 www
if [ $? -ne 0 ];then
        test -d  /var/html/www || echo "沒有www這個目錄!" >> /root/729
fi

cd /app && tar jcf /bak/logs_"$name"_`date +%F-%H-%M-%w`.tar.bz2 logs
if [ $? -ne 0 ];then
        test -d  /app || echo "沒有app這個目錄!">> /root/729
fi


cd /etc && tar jcf /bak/rc.local_"$name"_`date +%F-%H-%M-%w`.tar.bz2 rc.local
if [ $? -ne 0 ];then
        test -d /etc || echo "找不到etc這個目錄!">> /root/729
fi


cd /etc/sysconfig && /bin/tar jcf /bak/iptables_"$name"_`date +%F-%H-%M-%w`.tar.bz2 iptables
if [ $? -ne 0 ];then
        test -d /etc/sysconfig || echo "沒有iptables這個配置檔案!">> /root/729
fi

#刪除7天外的資料
find /bak -type f -mtime +7 | xargs rm -f

cd / && tar jcf /backup/"$name"_`date +%F-%H-%M-%w`.tar.bz2 bak

#對那個目錄下所有檔案進行校驗 然後 重定向到 md5sum檔案裡,作服務端比對用
cd /backup && /usr/bin/md5sum "$name"_`date +%F-%H-%M-%w`.tar.bz2 > md5sum_"$name".txt

rsync -az /backup [email protected]192.168.200.129::backup --password-file=/etc/rsync.password
if [ $? -ne 0 ];then
        exit 1
else
        echo "已成功推送" >> /root/729
fi

備份伺服器檢查完整性指令碼

#!/bin/bash

function xxx() {

#系統重要檔案檢查指令碼
path=/backup
path1=/backup/backup
clients=`find "$path1" -type f -name "192.168.200*" | awk -F "[/_]" '{h[$4]++}END{for(i in h)print i}' | wc -l`
cmd=`find $path -type f -name "md5sum*"`

#找到 根目錄裡backup下的md5sum打頭的校驗檔案和客戶端數量進行比對
#然後我md5sum -c 對檔案進行校驗 並反回碼
if [ `find $path -type f -name "md5sum*" | wc -l` == $clients ];then
        cd $path1
        /usr/bin/md5sum -c $cmd
                if [ $? -eq 0 ];then
                        echo "系統重要備份檔案推送檔案完整。完美~"
                        find $path -type f -name "md5sum*" | xargs rm -f
                else
                        echo "推送檔案不完整!"
                fi
else
        return
fi
}

function yyy(){
#增備檢查指令碼
mulu=/mysql
mulu1=/mysql/wbq/
shuliang=`find "$mulu1" -type f -name "192.168.200*" | awk -F "[/_]" '{h[$4]++}END{for(i in h)print i}' | wc -l`
cmd1=`find $mulu1 -type f -name "md5sum*"`
if [ `find $mulu1 -type f -name "md5sum*" | wc -l` == $shuliang ];then
        cd $mulu1
        /usr/bin/md5sum -c $cmd1
                if [ $? -eq 0 ];then
                        echo "增備推送檔案完整。完美~"
                        find $mulu1 -type f -name "md5sum*" | xargs rm -f
                else
                        echo "推送檔案不完整!"
                fi
fi
}

function zzz(){

#全備檢查指令碼
mulu=/mysql
cd $mulu
/usr/bin/md5sum -c md5sum.txt
        if [ $? -eq 0 ];then
                echo "全備推送檔案完整。完美~"
                rm -f md5sum.txt
        else
                echo "推送檔案不完整!"
        fi
}
cd /backup/backup
test -f md5sum*
if [ $? -eq 0 ];then
        xxx
else
        echo "沒有新的資料更新" 
fi
cd /mysql/wbq
test -f md5sum*
if [ $? -eq 0 ];then
        yyy
else
        echo "沒有新的資料更新"
fi
cd /mysql
test -f md5sum*
if [ $? -eq 0 ];then
        zzz
else
        echo "沒有新的資料更新"
fi


#因為是0點, 所以排除週二的週一的打包檔案是週日的資料
find $path ! -name "*-1.tar.gz" -type f -mtime +180 | xargs rm -f
find $mulu ! -name "*-1.tar.gz" -type f -mtime +180 | xargs rm -f