美文网首页
定时备份项目操作实例

定时备份项目操作实例

作者: _不想翻身的咸鱼 | 来源:发表于2019-09-30 14:47 被阅读0次

题目

企业全网备份项目说明

  1. 所有服务器的备份目录必须都为/backup
  2. 要备份的系统配置文件包括但不限于:
    a) 定时任务服务的配置文件 (/var/spool/cron/root) (适合web和nfs服务器)。
    b) 开机自启动的配置文件 (/etc/rc.local) (适合web和nfs服务器)。
    c) 日常脚本的目录 (/server/scripts)。
    d) 防火墙iptables的配置文件 (/etc/sysconfig/iptables-config)。
    e) 自己思考下还有什么需要备份呢?
  3. Web服务器站点目录假定为 (/var/html/www)。
  4. Web服务器访问日志路径假定为 (/app/logs)
  5. 服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
  6. 备份服务器上,不仅保留最近7天的备份数据,同时保留6个月内; 6个月之外每周一的所有数据副本保留
  7. 备份服务器上,要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
  8. 需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中。

服务器

web01 10.0.0.7
backup 10.0.0.41

服务端(backup服务器)

  • 下载安装rsync,检查用户
[root@backup ~]# yum install -y rsync
[root@backup ~]# id rsync
uid=1004(rsync) gid=1004(rsync) groups=1004(rsync)
  • 创建备份目录并修改权限
[root@backup ~]# mkdir /backup
[root@backup ~]# chown rsync.rsync /backup/
[root@backup ~]# ll /backup/ -d
drwxr-xr-x. 2 rsync rsync 6 Jun 14 23:21 /backup/
  • 创建密码文件,修改权限
[root@backup ~]# cat /etc/rsync.password
rsync_backup:oldboy123
[root@backup ~]# ll /etc/rsync.password 
-rw-------. 1 root root 23 Jun  8 02:33 /etc/rsync.password
  • 修改rsyncd.conf配置文件
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.7       
auth users = rsync_backup            
secrets file = /etc/rsync.password   
[backup_all]                             
path = /backup/
[root@backup ~]# systemctl restart rsyncd #重启服务
[root@backup ~]# systemctl enable  rsyncd  #设置开机自启动
#检查是否成功
[root@backup ~]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
   Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-06-15 00:18:16 CST; 1min 11s ago
 Main PID: 7844 (rsync)
   CGroup: /system.slice/rsyncd.service
           └─7844 /usr/bin/rsync --daemon --no-detach

Jun 15 00:18:16 backup systemd[1]: Stopped fast remote file copy program daemon.
Jun 15 00:18:16 backup systemd[1]: Started fast remote file copy program daemon.

客户端(web01服务器)

  • 下载安装rsync

    [root@web01 ~]# yum install -y rsync
    
  • 创建密码文件和修改权限

[root@web01 backup]# echo 'oldboy123' > /etc/rsync.password
[root@web01 backup]# cat /etc/rsync.password 
oldboy123
[root@web01 backup]# ll /etc/rsync.password 
-rw-r--r--. 1 root root 10 Sep  9 15:46 /etc/rsync.password
[root@web01 backup]# chmod 600  /etc/rsync.password
  • 测试是否可以向服务端推送数据
[root@web01 backup]# rsync /etc/hostname rsync_backup@172.16.1.41::backup_all --password-file=/etc/rsync.password

[root@backup ~]# ll /backup/
total 4
-rw-r--r--. 1 rsync rsync 6 Jun 15 00:31 hostname
[root@backup ~]# cat /backup/hostname 
web01

以前部分已经把两个服务器打通,接下来就是编辑两个服务器的脚本

客户端(web01)测试命令

  • 首先创建/backup目录,以便存放打包的文件
[root@web01 ~]# mkdir /backup
  • 创建ip为名称的目录(方便管理)
[root@web01 backup]# ifconfig eth0| awk -F' ' 'NR==2{print $2}'
10.0.0.7
[root@web01 backup]# ip a s eth0 | awk -F '[ /]+' 'NR==3{print $3}'
10.0.0.7
[root@web01 backup]# IP=`ip a s eth0 | awk -F '[ /]+' 'NR==3{print $3}'`
[root@web01 backup]# echo $IP
10.0.0.7
  • 打包备份数据到/backup(由于rc.local为软连接,所以加入参数h)

/var/spool/cron/root

/etc/rc.local

/server/scripts

/etc/sysconfig/iptables-config

/var/html/www

/app/logs

[root@web01 backup]# tar zcvfh /backup/`date +%F-%w`_all_data.tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables-config /var/html/www /app/logs

[root@web01 /]# tree /backup/
/backup/
└── 2019-09-09-1_all_data.tar.gz
└── 2019-09-10-2_all_data.tar.gz

1 directory, 2 files

  • 制作md5sum指纹验证
[root@web01 /]# find /backup/ -type f -name "*`date +%F-%w`*.tar.gz"|xargs md5sum >/backup/finger.txt
[root@web01 /]# cat /backup/finger.txt 
1b5dfd4bf240e744a658b1c50fc6d375  /backup/2019-09-09-1_all_data.tar.gz
  • 将本地7天以前的数据进行删除
[root@web01 /]# find /backup -type f -name "*.tar.gz"  -mtime +7 -delete 
  • 创建脚本
[root@web01 /]# touch /server/scripts/backup_log.sh
  • backup_log.sh
[root@web01 /]# cat /server/scripts/backup_log.sh 
#!/bin/bash
source /etc/profile

#var
IP=`ip a s eth0 | awk -F '[ /]+' 'NR==3{print $3}'`
backup_path="/backup"

#mkdir file
mkdir $backup_path/$IP/ -p

#tar
cd / && tar zcfh $backup_path/$IP/`date +%F-%w`_all_data.tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables-config ./var/html/www ./app/logs
sleep 2

#md5sum
find $backup_path -type f -name "*`date +%F-%w`*.tar.gz"|xargs md5sum >$backup_path/$IP/finger.txt

#rsync data
rsync -az $backup_path/  rsync_backup@172.16.1.41::backup_all --password-file=/etc/rsync.password

#delete
find $backup_path -type f -name "*.tar.gz"  -mtime +7 -delete
  • 测试
[root@backup /]# md5sum -c /backup/10.0.0.7/finger.txt 
/backup/10.0.0.7/2019-09-12-4_all_data.tar.gz: OK
  • 服务端( backup )
  • 模拟数据
[root@backup ~]# ll /backup/10.0.0.7/
total 32
-rw-r--r--. 1 rsync rsync 2356 Feb  4  2018 2018-02-04-0_all_data.tar.gz
-rw-r--r--. 1 rsync rsync 2356 Feb  1 18:23 2019-02-01-5_all_data.tar.gz
-rw-r--r--. 1 rsync rsync 2356 Feb  4 18:23 2019-02-04-1_all_data.tar.gz
-rw-r--r--. 1 rsync rsync 2356 Mar  1 18:23 2019-03-01-5_all_data.tar.gz
-rw-r--r--. 1 rsync rsync 2356 Sep  1  2019 2019-09-01-0_all_data.tar.gz
-rw-r--r--. 1 rsync rsync 2356 Sep  9  2019 2019-09-09-1_all_data.tar.gz
-rw-r--r--. 1 rsync rsync 2356 Sep 12  2019 2019-09-12-4_all_data.tar.gz
-rw-r--r--. 1 rsync rsync   80 Feb  4  2018 finger.txt

  • 测试
[root@backup ~]# find /backup -type f -name "*.tar.gz" -mtime +180 ! -name "*-1_.tar.gz"
/backup/10.0.0.7/2019-03-01-5_all_data.tar.gz
/backup/10.0.0.7/2019-02-01-5_all_data.tar.gz
/backup/10.0.0.7/2019-02-04-1_all_data.tar.gz
/backup/10.0.0.7/2018-02-04-0_all_data.tar.gz
  • 邮箱
vi /etc/mail.rc 
set from=XXXXXXX@qq.com                
set smtp=smtp.qq.com                     
set smtp-auth-user=XXXXXXX@qq.com      
set smtp-auth-password=pmdwqabguenabdja  
set smtp-auth=login   

[root@backup ~]# systemctl restart postfix.service
[root@backup ~]# systemctl enable postfix.service 
[root@backup ~]# systemctl status postfix 
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-09-09 19:10:09 CST; 58s ago
 Main PID: 8570 (master)
   CGroup: /system.slice/postfix.service
           ├─8570 /usr/libexec/postfix/master -w
           ├─8571 pickup -l -t unix -u
           └─8572 qmgr -l -t unix -u

Sep 09 19:10:08 backup systemd[1]: Starting Postfix Mail Transport Agent...
Sep 09 19:10:09 backup postfix/master[8570]: daemon started -- version 2.10.1, configuration /etc/postfix
Sep 09 19:10:09 backup systemd[1]: Started Postfix Mail Transport Agent.
  • 脚本
[root@backup /]# touch  /server/scripts/web.sh
#!/bin/bash

backup_path="/backup"
mail="XXXXXXX@qq.com"

#md5sum
find $backup_path -type f -name 'finger.txt' |xargs md5sum -c > /tmp/mail.txt 2>/dev/null

#send mail info      code pmdwqabguenabdja
mail -s "每日备份信息 $(date -d '-1 day' +%F)" $mail </tmp/mail.txt

#delete +7 algo
find $backup_path -type f -name "*.tar.gz" -mtime +180 ! -name "*-1_.tar.gz" -delete

  • 定时任务

  • backup定时任务

[root@backup /]# crontab -l
#!/bin/bash

#daily backup
00 02 * * * /bin/sh /server/scripts/web.sh > /dev/null 2>&1
  • web定时任务
[root@web01 /]# crontab -l
#!/bin/bash

#daily backup
00 01 * * * /bin/sh /server/scripts/backup_log.sh >/dev/null 2>&1

需要注意的一些问题:

问题:脚本中设置ip变量,运行脚本ok,定时任务不简析变量.

原因:crontab与环境变量

不要假定cron知道所需要的特殊环境,它其实并不知道。
当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸。

第一种办法:把所有系统变量全部加载一下

!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
export PATH
第二种办法:通过source命令引入环境变量

#!/bin/bash
source /etc/profile

相关文章

  • 定时备份项目操作实例

    题目 企业全网备份项目说明所有服务器的备份目录必须都为/backup要备份的系统配置文件包括但不限于:a) 定时任...

  • A.11 springboot 互斥定时任务

    背景 当我们的项目为了达到负载均衡或者备份的目的,服务通常会启动两个及以上的实例,但是如果服务中有定时任务,定时任...

  • Linux shell下载远程文件夹到本地目录

    最近在操作 syno,尝试通过 shell 脚本定时备份远程服务器的项目信息,在此分享下脚本文件。 创建 down...

  • 8月16日 全网备份

    全网备份项目部署说明 全网备份需求完成阶段 脚本编写 编写定时任务客户端定时任务时间: 00:00服务端定时任务时...

  • 事件触发备份详解

    事件触发备份指当某一个确定事件发生时,触发备份操作。相对实时备份和定时备份来说,在教科书中见得较少,但实际有广泛的...

  • MySQL数据恢复

    利用binlog闪回误操作数据 用全量备份重搭实例,再利用增量binlog备份,恢复到误操作之前的状态。然后跳过误...

  • linux 下 mysql(5.7)数据库定时备份数据,并同步到

    我的操作环境为mysql5.7 , centos7.4一: 数据库的定时备份1.创建备份文件目录 2.创建备份s...

  • Linux 定时任务详解

    1. 定时任务概念 1.1 作用 类似生活中的闹钟 可以自动完成操作命令 定时备份系统里的数据 1.2 定时任务软...

  • 学习node应用中node-schedule定时任务

    1. 前言 在实际开发项目中,会遇到很多定时任务的工作。比如:定时导出某些数据、定时发送消息或邮件给用户、定时备份...

  • SQL Server数据库定时备份

    定时备份效果为: 每天晚上0点 对指定数据库进行压缩备份。 此处只演示备份计划,删除计划可按同样的操作步骤进行配置...

网友评论

      本文标题:定时备份项目操作实例

      本文链接:https://www.haomeiwen.com/subject/bqsbyctx.html