全网备份脚本初级编写思路

文章目录

准备工作:部署rsync服务

部署rsync

服务端:

第一个里程:确认软件是否安装
yum install -y rsync
systemctl enable rsyncd开机启动
第二个里程:编写配置文件

编写任何配置文件前先备份!

cp /etc/rsyncd.conf{,.bak}

vi /etc/rsyncd.conf
#rsync_config
#created by HQ at 2017
##rsyncd.conf start##
    
uid = rsync
gid = rsync
port = 873
fake super = yes
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
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup

修改后重启服务:

systemctl restart rsyncd
第三个里程:创建备份目录管理用户

创建一个虚拟用户

useradd  rsync  -M -s /sbin/nologin  (有需要可以指定uid    -u  xxx)
#id rsync
uid=1042(rsync) gid=1046(rsync) groups=1046(rsync)
第四个里程:创建一个备份数据目录并修改属主属组
[root@backup ~]# mkdir /backup
chown rsync.rsync  /backup 
第五个里程:创建一个访问认证文件
vim /etc/rsync.password  
rsync_backup:oldboy123                 

改文件权限:

[root@backup ~]# chmod 600 /etc/rsync.password 
[root@backup ~]# ll /etc/rsync.password 
-rw------- 1 root root 25 1月   8 10:34 /etc/rsync.password
第六个里程:启动备份服务程序
systemctl start rsyncd
systemctl enable rsyncd

客户端:

远程备份数据工作方式(类似于scp命令功能)

拉取数据:客户端将数据进行下载 <-- 备份服务器 (还原)

rsync 参数 远程主机地址或者名称:拉取的数据信息 本地保存数据的目录信息

rsync 172.16.1.41:/oldgirl/oldgirl01.txt  /tmp
推送数据:客户端将数据进行上传 --> 备份服务器 (备份)

rsync 参数 本地需要备份推送数据 远程主机地址或者名称:/备份数据路径信息

rsync -avz /oldboy/oldboy.txt  backup:/tmp  
(在/etc/hosts文件添加域名与IP才能实现本地解析)
PS:rsync在推送目录数据时,目录后面有 / 和没有/斜线有本质区别

有/斜线的时候将目录下面的数据内容进行推送传输
没有/斜线的时候将目录本身以及下面数据内容都进行推送传输

守护进程备份数据方式(服务端/客户端)daemon(实时备份)

拉取数据(下载还原):Pull: rsync [OPTION…] [USER@]HOST::SRC… [DEST]

rsync 参数 远程认证用户信息@服务端主机名称或地址::模块信息 本地保存数据路径
(模块信息是在rsync配置文件/etc/rsyncd.conf里带中括号的信息,可以自行修改)

rsync -avz rsync_backup@172.16.1.41::backup /tmp

(暂未解决未知名原因有的设备会报错,在还原时模块信息后面加指定路径)

rsync -avz rsync_backup@172.16.1.41::backup/tmp/etc/host /tmp

路径目录需要加上斜线:否则目录也过去了

rsync -avz rsync_backup@172.16.1.41::backup/tmp/etc/host/ /tmp
推送数据(上传备份):Push: rsync [OPTION…] SRC… [USER@]HOST::DEST

rsync 参数 本地需要推送的数据 认证用户名称@服务端主机名或地址::模块信息

rsync -avz /oldboy  rsync_backup@172.16.1.41::backup

免密上传备份:

需要在客户端创建密码文件,修改权限为600

[root@backup ~ 17:22:26]$ vim /etc/rsync.passwd

[root@nfs01 ~]# cat /etc/rsync.passwd
oldboy123

[root@backup ~ 17:23:07]$  chmod 600 /etc/rsync.passwd

[root@nfs01 ~]# ll /etc/rsync.passwd
-rw------- 1 root root 10 Jan  9 17:11 /etc/rsync.passwd

[root@nfs01 ~]# rsync -avz /tmp rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
sending incremental file list
tmp/
tmp/2233.txt
tmp/.ICE-unix/
tmp/.Test-unix/
tmp/.X11-unix/
tmp/.XIM-unix/
tmp/.font-unix/
tmp/vmware-root_5573-4148014734/
tmp/vmware-root_5836-1003073759/
tmp/vmware-root_5933-1958095513/

全网备份需求:

1)所有服务器的备份目录必须都为/backup

mkdir -p  /backup 

2)要备份 的系统配置文件包括但不限于:

mkdir -p /server/scripts
touch /etc/sysconfig/iptables
crontab -e
* * * * * echo 123 &>/etc/null
方法一:压缩数据 绝对路径
tar zcvhf /backup/system_bak_`date -d "-1day" +%F_%A`.tar.gz  /var/spool/cron/root  /etc/rc.local  /server/scripts  /etc/sysconfig/iptables
方法二:压缩数据 相对路径
cd /
tar zcvhf /backup/system_bak_`date -d "-1day" +%F_%A`.tar.gz  ./var/spool/cron/root  ./etc/rc.local  ./server/scripts  ./etc/sysconfig/iptables

3)Web服务器站点目录假定为 (/var/html/www)

mkdir -p /var/html/www
cd /
tar zcvhf /backup/web_wwwbak_`date -d "-1day" +%F_%A`.tar.gz ./var/html/www

4)Web服务器A访问日志路径假定为( /app/logs)

mkdir -p /app/logs
cd /
tar zcvhf /backup/web_logbak_`date -d "-1day" +%F_%A`.tar.gz ./app/logs

5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)

find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f

6)备份服务器上,保留每周一的所有数据副本,以及保留6个月内的数据副本。

backup服务器端:
两种方法保留周一数据信息

方法一:根据文件名称信息进行保留
文件名称信息后面加上_date +%F_%A 或者%w

find /backup/ -type f -name "*.tar.gz" ! -name  "*_Monday.tar.gz" -mtime +180 | xargs rm -rf

方法二:可以将每周一的数据进行单独保存

find /backup/ -type f  -name  "*_Monday.tar.gz"|xargs mv -t /backup_Monday
find /backup/ -type f -name "*.tar.gz" -mtime +180 -dalete

7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存

方法一:在要备份的客户端主机上,backup目录中创建有IP地址信息子目录

[root@web01 backup 19:03:18]$ mkdir /backup/172.16.1.31
cd /
tar zcvhf /backup/172.16.1.31/system_bak_`date +%F_%A`.tar.gz  ./var/spool/cron/root  ./etc/rc.local  ./server/scripts  ./etc/sysconfig/iptables

rsync -avz /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd

方法二:利用rsync命令创建子目录

rsync -avz /buckup/ rsync_backup@172.16.1.41::backup/172.16.1.31/ --password-file=/etc/rsync.passwd

8)需要确保备份的数据尽量完整正确 ,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中

如何发邮件:备份服务器上安装

qq邮箱授权码:
xxxxxx
配置发件人方式: 测试邮箱: 发件人----> 收件人 发消息
[root@backup ~]# yum install mailx -y
[root@backup ~]# vim /etc/mail.rc #最后一行添加
set bsdcompat
set from=673945260@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=673945260@qq.com
set smtp-auth-password=邮箱授权码

配置后重启邮箱:

systemctl restart postfix.service

发送邮件命令:

mail -s "chenbeiping" "673945260@qq.com" < /etc/hosts
a 验证数据传输完整性

第一个步骤:客户端生成文件指纹信息

[root@web01 172.16.1.31 19:21:05]$ md5sum system_bak_2020-01-12_Sunday.tar.gz 
5c6c511f3ca98ea8dafa42e769ce97bc  system_bak_2020-01-12_Sunday.tar.gz

生成指纹信息

find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/172.16.1.31/web01.md5

第二个步骤:服务端对文件指纹信息进行对比

[root@backup 172.16.1.31 19:39:40]$ md5sum -c web01.md5 
/backup/172.16.1.31/system_bak_2020-01-12_Sunday.tar.gz: OK
b 对验证结果进行邮件告知运维人员
find /backup/ -type f -name "*.md5" |xargs md5sum -c > /tmp/md5.txt
mail -s "backupfile notification" "673945260@qq.com" </tmp/md5.txt

全网备份脚本编写:

运行之前先配置一下定时任务生成配置文件

crontab -e
* * * * * echo 123 &>/etc/null

以及配置免密上传备份密码文件

备份服务客户端脚本:

web01服务器脚本

crontab -e
* * * * * echo 123 &>/etc/null
以及配置免密上传备份密码文件


vim /server/scripts/backup.sh
#!/bin/bash
#01.创建目录信息
dir="/backup/"
IP=$(hostname -I|awk  '{print $NF}')
mkdir -p $dir/$IP      /var/html/www   /app/logs
touch /etc/sysconfig/iptables

#02.打包备份数据以当前时间命名
cd / && \
tar zchf $dir/$IP/web01system_bak_`date -d "-1day" +%F_%A`.tar.gz  ./var/spool/cron/root  ./etc/rc.local  ./server/scripts  ./etc/sysconfig/iptables
tar zchf $dir/$IP/web01html_bak_`date -d "-1day" +%F_%A`.tar.gz  ./var/html/www/
tar zchf $dir/$IP/web01logs_bak_`date -d "-1day" +%F_%A`.tar.gz  ./app/logs/

#03.生成当天的md5校验码
find $dir/ -type f -name "*.tar.gz" -mtime -1 | xargs md5sum >$dir$IP/web01.md5

#04.push rsync
rsync -az $dir rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd

#05.删除7天前的压缩文件
#find $dir/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f >/dev/null
find $dir/ -type f -name "*.tar.gz" -mtime +7 -delete

nfs01:初始化备份脚本

vim /server/scripts/backup.sh
#!/bin/bash
#01.创建目录信息
dir="/backup/"
IP=$(hostname -I|awk  '{print $NF}')
mkdir -p $dir$IP      
touch /etc/sysconfig/iptables

#02.打包备份数据以当前时间命名
cd / && \
tar zchf $dir$IP/nfs01system_bak_`date -d "-1day" +%F_%A`.tar.gz  ./var/spool/cron/root  ./etc/rc.local  ./server/scripts  ./etc/sysconfig/iptables

#03.make md5校验码
find $dir -type f -name "*.tar.gz"|xargs md5sum >$dir/$IP/nfs01.md5

#04.push rsync
rsync -az $dir rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd

#05.删除7天前的压缩文件
#find $dir/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f >/dev/null
find $dir -type f -name "*.tar.gz" -mtime +7 -delete

备份服务服务端脚本

mkdir -p /server/scripts/
chown rsync.rsync /backup/

vim /server/scripts/ck.sh
#!/bin/bash

#01.check md5sum
#find /backup/ -type f -name "*.md5" |xargs md5sum -c > /tmp/md5.txt
#cat /tmp/md5.txt|sed -r 's#/backup|/|:# #g'|awk 'BEGIN{print "备份服务器地址信息","备份文件信息","备份结果信息"}{print $0}'|column -t > /tmp/$(date +%F_%A)mail.txt

#01验证数据完整性 ,查看当天生成的md5文件
file_count=$(find /backup -type f -name "*.md5" -mtime -1|wc -l)

if [ $file_count -ne 2 ] 
then
   echo "md5.txt not sent" | mail -s "finger.txt sent error" 673945260@qq.com
   find /backup -type f -name "*.md5"|xargs md5sum -c > /tmp/md5.txt
else
   find /backup -type f -name "*.md5"|xargs md5sum -c > /tmp/md5.txt
fi


#02.send mail
mail -s "backupfile notification" "673945260@qq.com" < /tmp/$(date +%F_%A)mail.txt


#03.delete 180 ago file
find /backup/ -type f -name "*.tar.gz" ! -name  "*_Monday.tar.gz" -mtime +180 | xargs rm -rf

编写定时任务:

客户端定时任务时间  00:00
0 0 * * * /bin/sh /server/scripts/backup.sh &>/dev/null


服务端定时任务时间  06:00   时间晚一点避免文件没有传完
0 6 * * *  /bin/sh /server/scripts/ck.sh &>/dev/null
发布了25 篇原创文章 · 获赞 0 · 访问量 537
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览