1. 程式人生 > >利用shell指令碼實現企業備份基本環境

利用shell指令碼實現企業備份基本環境

在這裡插入圖片描述

要求是利用ansible遠端啟動本地指令碼來實現。因此,模擬五臺。 利用ansible主機 分發四個指令碼給不同的伺服器。

在備份伺服器上配置rsync檔案。增加系統重要檔案模組和mysql模組還有nfs模組

uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[backup]  #系統重要檔案打包備份的模組 根據這個路徑打包
path = /backup/
ignore errors
read only = false
lise = false
hosts allow = 192.168.200.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[mysql]      mysql資料庫的備份模組 
path = /mysql/
ignore errors
read only = false
lise = false
hosts allow = 192.168.200.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_mysql
secrets file = /etc/rsync.password

[nfs]   nfs伺服器的備份模組
path = /nfs/
ignore errors
read only = false
lise = false
hosts allow = 192.168.200.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_nfs
secrets file = /etc/rsync.password

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]
::backup --password-file=/etc/rsync.password if [ $? -ne 0 ];then exit 1 else echo "已成功推送" >> /root/729 fi

nfs伺服器inotify+rsync實時監控

#!/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]
::nfs --password-file=/etc/rsync.password else cd $Path rsync -azP ./ --delete [email protected]::nfs --password-file=/etc/rsync.password fi done

mysql資料庫全備指令碼

#!/bin/bash
name=192.168.200.139
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   #由於是每天0點進行備份 所以就是週一的0點也就是週日的資料 排除週日的資料  其餘僅儲存30天本地全備資料
cd /usr/local/mysql/data
rm -f mysql-bin.0*     #進行全備之後  把二進位制日誌就可以清空了,因為用不上了。

系統重要檔案檢查完整性指令碼 (給備份伺服器推的)

#!/bin/bash

#系統重要檔案檢查指令碼
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
	echo "推送檔案有誤!"
fi
find $path ! -name "*-1.tar.gz" -type f -mtime +180 | xargs rm -f #備份伺服器只保留6個月的資料 除了週一0點的也就是週日的資料

增備檢查指令碼(三個檢查指令碼大同小異)

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

全被檢查完整性指令碼

#!/bin/bash
mulu=/mysql
cd $mulu
/usr/bin/md5sum -c md5sum.txt
	if [ $? -eq 0 ];then
		echo "推送檔案完整。完美~"
		rm -f md5sum.txt
	else
		echo "推送檔案不完整!"
	fi
	find $mulu ! -name "*-1.tar.gz" -type f -mtime +180 | xargs rm -f #備份伺服器只保留6個月的資料 除了週一0點的也就是週日的資料