利用shell指令碼實現企業備份基本環境
阿新 • • 發佈:2018-12-17
要求是利用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點的也就是週日的資料