一、全网备份

1.1 我的项目环境筹备

主机名外网IP内网IP服务器
backup10.0.0.203172.16.1.203rsync服务器
nfs-110.0.0.204172.16.1.204nfs服务器
web-110.0.0.205172.16.1.205web服务器

1.2 我的项目需要

公司中的web集群和nfs服务器都须要进行备份,避免宕机和磁盘损坏,如果一旦服务器和磁盘损坏,结果不堪设想,

  1. 标准对立,所有服务器的备份目录必须都为/backup
  2. 须要备份的零碎配置文件
    a. 定时工作服务的配置文件(/var/spool/cron/root)
    b. 开机自启动配置文件(/etc/rc.local)
    c. 日常脚本目录(/server/scripts)
    d. 防火墙iptables配置文件(/etc/sysconfig/iptables-config)
    e. web的站点目录和日志目录(/var/www/html/ /app/log/)
  3. web服务器保留打包后7天后的备份数据
  4. 备份服务器上,保留每周日的所有数据正本,其余要保留180天的数据
  5. 备份的数据服务器按IP地址为目录保留,备份的文件应用工夫名字保留
  6. 确保备份的数据完整性,在备份服务器上对备份的数据每天查看,并将备份胜利及失败的后果发到邮箱

1.3 我的项目步骤

1.3.1 创立我的项目所需的目录

mkdir -p /backup        //所有服务器mkdir /server/scripts   //nfs服务和web服务器

1.3.2 客户端须要压缩的数据信息

压缩nfs和web服务

//nfs服务器

$ tar -zcvPhf /backup/data_backup.tar.gz_$(date +%F-week%w) /var/spool/cron/root /etc/rc.local /server/scripts

//web服务器

$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /var/www/html $ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /app/log/$ tar -zcvPhf /backup/file_backup.tar.gz_$(date +%F-week%w) /etc/sysconfig/iptables-config /server/scripts

PS:倡议web的站点目录和log目录离开打包,因为不论是哪个目录数据都会很大,打包的时候会很慢,一个一个打包能够晋升打包的速率。

//tar查看并解压确定

$ tar tf /backup/data_backup.tar.gz_2020-12-22-weeek2$ tar tf /backup/web_backup.tar.gz_2020-12-22-weeek2$ tar xf  /backup/data_backup.tar.gz_2020-12-22-weeek2$ tar xf /backup/web_backup.tar.gz_2020-12-22-weeek2

1.3.3 web服务器创立7天前的数据并删除

创立7天前数据

//创立日期本人设定

$ date -s "20200430"  $ lltotal 144-rw-r--r-- 1 root root 12435 Dec  2 16:55 web_backup.tar.gz_2020-12-02-rw-r--r-- 1 root root 12435 Dec  2 16:55 web_backup.tar.gz_2020-12-03.....略.....-rw-r--r-- 1 root root 12435 Dec  2 16:55 web_backup.tar.gz_2020-12-09-rw-r--r-- 1 root root 12435 Dec  2 16:55 web_backup.tar.gz_2020-12-10

找出七天前的数据,并删除

$ find /backup -type f -mtime +7 |xargs rm -f

rsync的配置文件

cat /etc/rsyncd.conf uid = rsync gid = rsyncport = 873fake super = yesuse chroot = nomax connections = 200timeout = 300pid file = /var/run/rsyncd.pidlock file = /var/run/rsync.locklog file = /var/log/rsyncd.logignore errorsread only = false#list = falsehosts allow = 172.16.1/24hosts deny = 0.0.0.0/24auth users = rsync_backupsecrets file = /etc/rsync.password[backup]comment = "backup dir by other"path = /backup

应用rsync传输到备份服务端

$ rsync -avz /backup/ rsync_backup@172.16.1.205::backup --password-file=/etc/rsync_password

1.3.4 备份服务端删除180天的数据,并保留每周日的数据

设置服务器工夫为180天后,在服务端找出180天前的数据并删除,并保留每周日的数据

$ date -s "202105010"$ find /backup -type f -mtime +180 ! -name "*week7"|xargs rm -f$ ll /backup/-rw-r--r-- 1 rsync rsync 12435 Mar  5  2021 web_backup.tar.gz_2021-03-08-week7

1.3.5 备份服务器以IP地址目录保留数据,并验证数据完整性

创立IP地址目录(web和nfs创立)

$ mkdir -p /backup/10.0.0.203$ lldrwxr-xr-x 2 root root 6 Oct 20 00:07 10.0.0.203

离开打包web服务的文件(nfs服务雷同)

$ tar -zcvPhf /backup/web_backup.tar.gz_$(date +%F-week%w) /var/www/html$ tar -zcvPhf /backup/log_backup.tar.gz_$(date +%F-week%w) /app/log

通过md5sum命令进行校验

//将校验码导入到指纹文件finger.txt

$ md5sum /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 >finger.txt$ md5sum /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5 >>finger.txt

//查看校验码文件

$ cat finger.txt4c570d961fd6c7790e0a2f3f576a8681  /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week54c570d961fd6c7790e0a2f3f576a8681  /backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5

//将压缩包和指纹文件发送到备份服务器

$ rsync -avz /backup/10.0.0.203 rsync_backup@10.0.0.205::backup --password-file=/etc/rsync_password  

留神:10.0.0.203前面不要加斜杠,否则只有文件传输过来,目录没有传输

//进入目录比照指纹文件的校验码(服务端)

$ md5sum -c /backup/10.0.0.203/finger.txt  //绝对路径/backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5: OK/backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5: OK$ md5sum -c finger.txt                     //相对路径>/backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5: OK/backup/10.0.0.203/web_backup.tar.gz_2021-03-05-week5: OK

1.3.6 实现发送邮件

邮件发送流程

开启163邮件代理

编辑邮箱配置文件,增加配置

$ tail -2 /etc/mail.rc             set from=163邮箱账户 smtp=smtp.163.comset smtp-auth-user=163邮箱账户 smtp-auth-password=受权码 smtp-auth=login

发送邮件

$ echo "邮件发送测试" |mail -s "mail check" qq邮箱账户$ mail -s  "邮箱测试" qq邮箱账户 < 文件

测试

$ find /backup/ -type f -name "finger.txt"|xargs md5sum -c &>/tmp/check.txt$ echo "邮件发送测试" |mail -s "邮箱测试" qq邮箱账户 </tmp/check.txt 

PS:应用find命令找到指纹文件,通过xargs将给md5sum解决,'&'代表也将错误信息一起写入到文件

1.4 编写全网备份脚本

1.4.1 客户端脚本(nfs服务器备份脚本)

[root@nfs /server/scripts]# cat bak.sh #!/bin/bash                                   //设置目录和IP地址的变量Bak_dir="/backup"             Ip_info=$(hostname -i)# create dir                          //创立相应的目录mkdir -p $Bak_dir/$Ip_info # tar system file                     //打包零碎的文件tar -cPhf /$Bak_dir/$Ip_info/data_backup.tar.gz_$(date +F%-weeek%w) /var/spool/cron/root /etc/rc.local /server/scripts # del 7 ago data info                //删除7天的数据find /$Bak_dir/$Ip_info -type f -mtime +7|xargs rm -f 2>/dev/null# create finger file                 //创立指纹文件find /$Bak_dir/$Ip_info -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Bak_dir/$Ip_info/finger.txt# rsync backup push data info       //rsync推送数据到服务端rsync -az /$Bak_dir/$Ip_info rsync_backup@10.0.0.205::backup --password-file=/etc/rsync.password

1.4.2 客户端脚本(web服务器备份脚本)

[root@nginx scritps]# cat web_bak.sh#!/bin/bashBak_dir="/backup"Ip_info=$(hostname -i)# create dir mkdir -p $Bak_dir/$Ip_info# tar system filecd /#!/bin/bashBak_dir="/backup"Ip_info=$(hostname -i)# create dir mkdir -p $Bak_dir/$Ip_info# tar system filetar -cPhf /$Bak_dir/$Ip_info/web_backup.tar.gz_$(date +%F-week%w) /usr/share/nginx/htmltar -cPhf /$Bak_dir/$Ip_info/log_backup.tar.gz_$(date +%F-week%w) /var/log/nginx# del 7 ago data infofind /$Bak_dir/$Ip_info -type f -mtime +7|xargs rm -f 2>/dev/null# create finger filefind /$Bak_dir/$Ip_info -type f -mtime -1 ! -name "finger*"|xargs md5sum >/$Bak_dir/$Ip_info/finger.txt# rsync backup push data inforsync -az /$Bak_dir/$Ip_info rsync_backup@10.0.0.205::backup --password-file=/etc/rsync.password

1.4.3 备份服务器端脚本

[root@rsync /server/scripts]# cat server.sh #!/bin/bash//保留每个星期天的数据,将180天以前的数据删除# The server hold back each week 7 data info and hold back 6 months data infofind /backup -type f -mtime +180 ! -name "*week7" 2>/dev/null # check finger info                      //校验指纹信息find /backup -type f -name "finger*"|xargs md5sum -c &>/tmp/check.txt# send mail in for myself qq-mail         //发送邮件到本人邮箱mail -s "check backup info for $(date +%F)" QQ邮箱账号 </tmp/check.txt

1.5 实现定时全网数据备份(定制工作)

1.5.1 客户端定时工作

//nfs服务器

$ crontab -e# backup data0 0 * * * /bin/sh /server/scripts/bak.sh

//web服务器

$ crontab -e# backup data0 0 * * * /bin/sh /server/scripts/web_bak.sh

1.5.2 服务端

$ crontab -e# check backup data0 5 * * * /bin/sh /server/scripts/server.sh