利用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 rsync_backup@192.168.200.129::backup --password-file=/etc/rsync.password
if [ $? -ne 0 ];then
exit 1
else
echo "已成功推送" >> /root/729
fi
nfs服务器inotifly+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 rsync_nfs@192.168.200.129::nfs --password-file=/etc/rsync.password
else
cd $Path
rsync -azP ./ --delete rsync_nfs@192.168.200.129::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/* rsync_mysql@192.168.200.129::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
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 rsync_mysql@192.168.200.129::mysql --password-file=/etc/rsync.password #推送/data这个目录到备份服务器的mysql目录里
fi
done
---------------------
系统重要文件,全备,增备 检查完整性脚本(给备份服务器推送)
#!/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/data
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
-----------------