全网备份命令

                               大规模集群全网备份

                                                                                                    --案例及分析

要求:


  
  
  1. 企业案例:rsync上机实战考试题
  2. 某公司里有一台Web 服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性定时备份,要求如下:
  3. 每天晚上00点整在Web 服务器A上做打包备份网站程序目录并通过rsync命令推送到 服务器B上备份保留(备份思路可以是先在本地按日期打包,然后推送到备份服务器上)。
  4. 具体要求如下:
  5. 1. 需要备份的文件或目录有(原则上,只要运维人员写入或更改的数据,都需要备份):
  6. /var/spool/cron/root /etc/rc.local /etc/sysconfig/iptables /var/www/heml /app/logs
  7. 2. 为了规范化,每台web服务器进行本地备份时都备份到/backup目录下
  8. 3. 每台web服务器进行本地备份时,都备份到/backup下以本地IP地址命名的目录中
  9. 4. 打的tarball文件名需要包含执行当天的日期
  10. 5. 统一存储备份数据的服务器通过rsync daemon 方式提供存储备份数据的目录/bakcup
  11. 6. 由于web服务器本地的存储空间有限,需要将超过7天的备份数据删除
  12. 7. 为了方便的知道每次备份是否成功,我们需要做如下操作:
  13. 在每台web服务器上检查备份是否成功
  14. 在存储备份数据的服务器上检查备份数据是否推送成功,并发送邮件至管理员邮箱
  15. 8. 由于备份服务器空间有限,需要删除超过180天的备份数据,但每周六的备份数据需要永久保留

解答:


  
  
  1. 几个里程碑
  2. 1.在rsync服务器上,配置rsync服务,实现推送
  3. 服务端成功配置rsync,并在客户端成功推送。
  4. 2.在客户端nfs服务器上,实现打包,推送,删除,定时任务推送。
  5. 3.在rsync备份服务器上,做检查,发邮件给管理员

里程碑1:

服务端:


  
  
  1. [root@backup ~]# ifconfig eth0
  2. eth0 Link encap:Ethernet HWaddr 00:0C:29:F7:EC:E5
  3. inet addr:10.0.0.41 Bcast:10.0.0.255 Mask:255.255.255.0
  4. inet6 addr: fe80::20c:29ff:fef7:ece5/64 Scope:Link
  5. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  6. RX packets:1150 errors:0 dropped:0 overruns:0 frame:0
  7. TX packets:993 errors:0 dropped:0 overruns:0 carrier:0
  8. collisions:0 txqueuelen:1000
  9. RX bytes:134810 (131.6 KiB) TX bytes:122678 (119.8 KiB)
  10. [root@backup ~]# cat /etc/redhat-release
  11. CentOS release 6.7 (Final)
  12. [root@backup ~]# uname -r
  13. 2.6.32-573.el6.x86_64
  14. [root@backup ~]# rsync --version
  15. rsync version 3.0.6 protocol version 30
  16. Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
  17. Web site: http://rsync.samba.org/
  18. Capabilities:
  19. 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
  20. socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
  21. append, ACLs, xattrs, iconv, symtimes
  22. rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
  23. are welcome to redistribute it under certain conditions. See the GNU
  24. General Public Licence for details.

Rsync 的配置文件在/etc/rsycnd.conf   默认是不存在的

可以man rsyncd.conf 查看配置文件里的内容,然后再来添加


  
  
  1. [root@backup ~]# vim /etc/rsyncd.conf
  2. #rsync_config__________________________start
  3. #created by oldboy 20:30 2018-3-13
  4. ##rsyncd.conf start##
  5. uid = rsync
  6. gid = rsync
  7. use chroot = no
  8. max connections = 200
  9. timeout = 300
  10. pid file = /var/run/rsyncd.pid
  11. lock file = /var/run/rsync.lock
  12. log file = /var/log/rsyncd.log
  13. [backup]
  14. path = /backup
  15. ignore errors
  16. read only = false
  17. list = false
  18. hosts allow = 172.16.1.0/24
  19. hosts deny = 0.0.0.0/32
  20. auth users = rsync_backup
  21. secrets file = /etc/rsync.password
  22. #rsync_config________________end
  23. ~
  24. "/etc/rsyncd.conf" 21L, 488C 已写入
  25. [root@backup ~]# id rsync ==》查看rsync用户是否存在
  26. id: rsync:无此用户
  27. [root@backup ~]# useradd rsync -s /sbin/nologin -M -M:不建家目录
  28. [root@backup ~]# tail -1 /etc/passwd
  29. rsync:x:501:501::/home/rsync:/sbin/nologin
  30. [root@backup ~]# rsync --daemon ==》启动服务
  31. [root@backup ~]# ps -ef |grep rsync|grep -v grep ==》查看是否启动
  32. root 27649 1 0 20:39 ? 00:00:00 rsync --daemon
  33. [root@backup ~]# ll -d /backup
  34. ls: 无法访问/backup: 没有那个文件或目录
  35. [root@backup ~]# mkdir /backup
  36. [root@backup ~]# ls -ld /backup
  37. drwxr-xr-x 2 root root 4096 3月 13 20:44 /backup
  38. [root@backup ~]# chmod 777 /backup ==》不安全
  39. [root@backup ~]# ll -d /backup
  40. drwxrwxrwx 2 root root 4096 3月 13 20:44 /backup
  41. [root@backup ~]# chmod 755 /backup
  42. [root@backup ~]# ll -d /backup
  43. drwxr-xr-x 2 root root 4096 3月 13 20:44 /backup
  44. [root@backup ~]# chown rsync.rsync /backup 权限越小越安全
  45. [root@backup ~]# ll -d /backup
  46. drwxr-xr-x 2 rsync rsync 4096 3月 13 20:44 /backup
  47. [root@backup ~]# ll /etc/rsync.passwd
  48. ls: 无法访问/etc/rsync.passwd: 没有那个文件或目录
  49. [root@backup ~]# vim /etc/rsync.passwd
  50. rsync_backup:oldboy 用户:密码
  51. [root@backup ~]# cat /etc/rsync.passwd
  52. rsync_backup:oldboy
  53. [root@backup ~]# ls -l /etc/rsync.passwd
  54. -rw-r--r-- 1 root root 21 3月 13 20:50 /etc/rsync.passwd
  55. [root@backup ~]# chmod 600 /etc/rsync.passwd 修该/etc/rsync.passwd文件权限,注意此处必须为600不然会在日志文件中报错
  56. [root@backup ~]# ls /etc/rsync.passwd -l
  57. -rw------- 1 root root 21 3月 13 20:50 /etc/rsync.passwd

客户端:


  
  
  1. [root@nfs01 ~]# ifconfig eth0
  2. eth0 Link encap:Ethernet HWaddr 00:0C:29:82:B0:96
  3. inet addr:10.0.0.31 Bcast:10.0.0.255 Mask:255.255.255.0
  4. inet6 addr: fe80::20c:29ff:fe82:b096/64 Scope:Link
  5. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  6. RX packets:2391 errors:0 dropped:0 overruns:0 frame:0
  7. TX packets:1654 errors:0 dropped:0 overruns:0 carrier:0
  8. collisions:0 txqueuelen:1000
  9. RX bytes:243484 (237.7 KiB) TX bytes:228034 (222.6 KiB)
  10. [root@nfs01 ~]# cat /etc/redhat-release
  11. CentOS release 6.7 (Final)
  12. [root@nfs01 ~]# uname -r
  13. 2.6.32-573.el6.x86_64
  14. [root@nfs01 ~]# rsync --version
  15. rsync version 3.0.6 protocol version 30
  16. Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
  17. Web site: http://rsync.samba.org/
  18. Capabilities:
  19. 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
  20. socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
  21. append, ACLs, xattrs, iconv, symtimes
  22. rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
  23. are welcome to redistribute it under certain conditions. See the GNU
  24. General Public Licence for details.
  25. [root@nfs01 ~]# vim /etc/rsync.password
  26. oldboy
  27. [root@nfs01 ~]# cat /etc/rsync.password
  28. oldboy
  29. [root@nfs01 ~]# chmod 600 /etc/rsync.password
  30. [root@nfs01 ~]# ll /etc/rsync.password
  31. -rw------- 1 root root 7 3月 14 19:24 /etc/rsync.password
  32. [root@nfs01 ~]# cd /mnt/
  33. [root@nfs01 mnt]# mkdir -p /backup
  34. [root@nfs01 mnt]# ll
  35. 总用量 0
  36. [root@nfs01 mnt]# ll -d /backup
  37. drwxr-xr-x 2 root root 4096 3月 14 19:25 /backup

客户端向服务端推送:


  
  
  1. [root@nfs01 mnt]# cd /backup/ ==》在客户端创建一个和服务端相同的目录,目的是为了可以将需要推送的文件都放到该目录下进行推送
  2. [root@nfs01 backup]# touch stu{01..100} ==》在该目录下创建文件
  3. [root@nfs01 backup]# rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password ==》将该目录下的文件都推送给服务端
  4. sending incremental file list
  5. ./
  6. stu001
  7. stu002
  8. stu003
  9. ......
  10. stu099
  11. stu100
  12. sent 4425 bytes received 1911 bytes 12672.00 bytes/sec
  13. total size is 0 speedup is 0.00
  14. [root@backup ~]# ls /backup/ ==》查看服务端下/backup/下的文件
  15. stu001 stu011 stu021 stu031 stu041 stu051 stu061 stu071 stu081 stu091 ==》推送成功
  16. [root@nfs01 backup]# rsync -avz /backup/ rsync://[email protected] /backup/ --password-file=/etc/rsync.password ==》另一种推送方法
  17. Unexpected remote arg: rsync://[email protected]
  18. rsync error: syntax or usage error (code 1) at main.c(1201) [sender=3.0.6]
  19. [root@nfs01 backup]# rsync -avz /backup/ rsync://[email protected]/backup/ --password-file=/etc/rsync.password
  20. sending incremental file list
  21. ./
  22. stu001
  23. stu002
  24. stu003
  25. [root@backup ~]# rm -fr /backup/ ==》注意这里的删除是将该目录及该目录下的文件全删除
  26. [root@backup ~]# cd /backup
  27. -bash: cd: /backup: 没有那个文件或目录
  28. [root@backup ~]#
  29. [root@backup ~]#
  30. [root@backup ~]#
  31. [root@backup ~]# mkdir /backup
  32. [root@backup ~]# chown rsync.rsync /backup
  33. [root@backup ~]# ll /backup/
  34. 总用量 0
  35. [root@backup ~]# ll /backup
  36. 总用量 0
  37. [root@backup ~]# ll /backup -d
  38. drwxr-xr-x 2 rsync rsync 4096 3月 14 19:48 /backup
  39. [root@backup ~]# ll /backup
  40. 总用量 0
  41. -rw-r--r-- 1 rsync rsync 0 3月 14 19:27 stu001
  42. -rw-r--r-- 1 rsync rsync 0 3月 14 19:27 stu002
  43. -rw-r--r-- 1 rsync rsync 0 3月 14 19:27 stu003
  44. -rw-r--r-- 1 rsync rsync 0 3月 14 19:27 stu004
  45. [root@nfs01 backup]# rsync -avz /backup/ rsync://[email protected]/backup/stu01 --password-file=/etc/rsync.password ==》这里是推送目录下的某一个文件,这里只展示一种方法
  46. sending incremental file list
  47. created directory stu01
  48. ./
  49. stu001
  50. stu002
  51. stu003
  52. stu004
  53. stu005
  54. stu006
  55. st[root@backup ~]# ll /backup/ ==》推送成功
  56. 总用量 4
  57. drwxr-xr-x 2 rsync rsync 4096 3月 14 19:27 stu01
  58. u007

里程碑2:

模拟

因为在客户机上/var/www/heml   /app/logs这两个文件没有,所以需要模拟

[root@nfs01 backup]# mkdir /var/www/html /app/logs -p
  
  

打包:


  
  
  1. [root@nfs01 backup]# cd /
  2. [root@nfs01 /]# tar zcvfh /backup/backup_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs
  3. var/spool/cron/root
  4. etc/rc.local
  5. etc/sysconfig/iptables
  6. var/www/html/
  7. app/logs/

推送:


  
  
  1. [root@nfs01 /]# rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password
  2. sending incremental file list
  3. ./
  4. backup_2018-03-18.tar.gz
  5. sent 841 bytes received 30 bytes 116.13 bytes/sec
  6. total size is 731 speedup is 0.84
  7. [root@backup backup]# ll
  8. 总用量 4
  9. -rw-r--r-- 1 rsync rsync 731 3月 18 15:52 backup_2018-03-18.tar.gz

删除:

[root@nfs01 /]# find /backup/ -type f -name "*.tar.gz" -mtime +7 |xargs rm -f
  
  

放入脚本:


  
  
  1. [root@nfs01 /]# mkdir -p /server/scripts ==》存放脚本的目录,都写在该目录下
  2. [root@nfs01 /]# cd /server/scripts/
  3. [root@nfs01 scripts]# vim bak.sh ==》打包,推送,删除,保留等要求都放在该脚本里
  4. cd / &&\ ==》切换到/目录下, &&\的作用时链接两个命令
  5. tar zcfh /backup/backup_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc ==》打包
  6. /sysconfig/iptables var/www/html app/logs &&\
  7. rsync -az /backup/ [email protected]::backup --password-file=/etc/rsync.
  8. password &&\ ==》推送
  9. find /backup/ -type f -name "*.tar.gz" -mtime +7 |xargs rm -f ==》删除
  10. [root@nfs01 scripts]# rm -f /backup/* ==》删除/bakcup/目录下的所有文件,防止干扰下面的实验
  11. [root@backup ~]# rm -f /backup/* ==》删除/bakcup/目录下的所有文件,防止干扰下面的实验
  12. [root@backup ~]# ll /backup/ ==》查看一下是否完全删除/backup/目录下的所有文件
  13. 总用量 0
  14. [root@nfs01 scripts]# sh bak.sh ==》执行脚本
  15. [root@nfs01 scripts]# ll /backup/ ==》查看执行结果
  16. 总用量 4
  17. -rw-r--r-- 1 root root 731 3月 18 16:06 backup_2018-03-18.tar.gz
  18. [root@backup ~]# ll /backup/ ==》查看执行结果
  19. 总用量 4
  20. -rw-r--r-- 1 rsync rsync 731 3月 18 16:08 backup_2018-03-18.tar.gz
  21. [root@backup ~]# md5sum /etc/hosts ==》md5sum 指纹验证命令,确保传送安全性
  22. 54fb6627dbaa37721048e4549db3224d /etc/hosts
  23. [root@backup ~]# md5sum /bin/ls ==》也可以指纹验证二进制文件
  24. d5a715d0390ec5c2855094c805b08787 /bin/ls
  25. [root@nfs01 scripts]# vim bak.sh ==》向脚本中加入指纹验证 确保安全性能
  26. cd / &&\
  27. tar zcfh /backup/backup_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc
  28. /sysconfig/iptables var/www/html app/logs &&\
  29. rsync -az /backup/ [email protected]::backup --password-file=/etc/rsync.
  30. password &&\
  31. md5sum /backup/backup_$(date +%F).tar.gz >/backup/flag_$(date +%F).log ==向指纹放到.log文件中,以便查看
  32. find /backup/ -type f -name "*.tar.gz" -mtime +7 |xargs rm -f
  33. "bak.sh" 5L, 359C 已写入
  34. [root@nfs01 scripts]# cat bak.sh ==查看脚本
  35. cd / &&\
  36. tar zcfh /backup/backup_$(date +%F).tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
  37. rsync -az /backup/ [email protected]::backup --password-file=/etc/rsync.password &&\
  38. md5sum /backup/backup_$(date +%F).tar.gz >/backup/flag_$(date +%F).log
  39. find /backup/ -type f -name "*.tar.gz" -mtime +7 |xargs rm -f
  40. [root@backup backup]# rm -f * ==》删除/bakcup/目录下的所有文件,防止干扰下面的实验
  41. [root@backup backup]# ll
  42. 总用量 0
  43. [root@nfs01 scripts]# sh bak.sh ==》执行脚本
  44. [root@backup backup]# ll ==》查看脚本执行结果
  45. 总用量 8
  46. -rw-r--r-- 1 rsync rsync 731 3月 18 16:22 backup_2018-03-18.tar.gz
  47. -rw-r--r-- 1 rsync rsync 67 3月 18 16:22 flag_2018-03-18.log
  48. 当多台客户端同时备份时,通过ip可以知道备份文件的所属谁者
  49. [root@nfs01 scripts]# ifconfig eth1 ==》查看IP
  50. eth1 Link encap:Ethernet HWaddr 00:0C:29:82:B0:A0
  51. inet addr:172.16.1.31 Bcast:172.16.1.255 Mask:255.255.255.0
  52. inet6 addr: fe80::20c:29ff:fe82:b0a0/64 Scope:Link
  53. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  54. RX packets:731 errors:0 dropped:0 overruns:0 frame:0
  55. TX packets:555 errors:0 dropped:0 overruns:0 carrier:0
  56. collisions:0 txqueuelen:1000
  57. RX bytes:86214 (84.1 KiB) TX bytes:80803 (78.9 KiB)
  58. [root@nfs01 scripts]# ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}' ==》用awk取IP
  59. 172.16.1.31
  60. [root@nfs01 scripts]# vim bak.sh
  61. cd / &&\
  62. IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}') ==》向脚本中加入取IP,然后让所有的备份文件都打上IP标签
  63. Path=/backup ==》黄色部分是不同上面脚本的地方,这样做的好处是可以简写脚本
  64. Time=$(date +%F)
  65. mkdir $Path/$IP/ -p
  66. cd / &&\
  67. tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sys
  68. config/iptables var/www/html app/logs &&\
  69. md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
  70. rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.pa
  71. ssword &&\
  72. find $Path/ -type f -name "*.tar.gz" -name "*.log" -mtime +7 |xargs rm -f
  73. "bak.sh" 10L, 467C 已写入
  74. [root@backup backup]# rm -fr *
  75. [root@nfs01 scripts]# sh /server/scripts/bak.sh
  76. [root@backup backup]# ll
  77. 总用量 12
  78. drwxr-xr-x 2 rsync rsync 4096 3月 18 16:35 172.16.1.31 ==》这里就出现了上面脚本里的添加内容
  79. -rw-r--r-- 1 rsync rsync 731 3月 18 16:22 backup_2018-03-18.tar.gz
  80. -rw-r--r-- 1 rsync rsync 67 3月 18 16:22 flag_2018-03-18.log
  81. [root@backup backup]# cd 172.16.1.31/
  82. [root@backup 172.16.1.31]# ll
  83. 总用量 8
  84. -rw-r--r-- 1 rsync rsync 731 3月 18 16:36 backup_2018-03-18.tar.gz
  85. -rw-r--r-- 1 rsync rsync 79 3月 18 16:36 flag_2018-03-18.log
  86. [root@backup 172.16.1.31]# cat flag_2018-03-18.log ==》注意这里的.log里的内容是指纹
  87. 8434085d89e8706fda82ec4c0ec5ac8b /backup/172.16.1.31/backup_2018-03-18.tar.gz
  88. [root@nfs01 scripts]# cat bak.sh
  89. IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')
  90. Path=/backup
  91. Time=$(date +%F)
  92. mkdir $Path/$IP/ -p
  93. cd / &&\
  94. tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
  95. md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
  96. rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.password &&\
  97. find $Path/ -type f -name "*.tar.gz" -name "*.log" -mtime +7 |xargs rm -f
  98. [root@nfs01 scripts]# find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \)
  99. /backup/172.16.1.31/flag_2018-03-18.log
  100. /backup/172.16.1.31/backup_2018-03-18.tar.gz ==》这里是为了删除7天前的数据
  101. /backup/flag_2018-03-18.log
  102. /backup/backup_2018-03-18.tar.gz
  103. [root@nfs01 scripts]# find /backup/ -type f -mtime +7 \( -name "*.log" -o -name "*.tar.gz" \)
  104. [root@nfs01 scripts]# vim bak.sh
  105. IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')
  106. Path=/backup
  107. Time=$(date +%F)
  108. mkdir $Path/$IP/ -p
  109. cd / &&\
  110. tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sys
  111. config/iptables var/www/html app/logs &&\
  112. md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
  113. rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.pa
  114. ssword &&\
  115. find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs
  116. rm -f
  117. "bak.sh" 10L, 478C 已写入
  118. [root@nfs01 scripts]# sh bak.sh
  119. /backup/172.16.1.31/flag_2018-03-18.log /backup/172.16.1.31/backup_2018-03-18.tar.gz
  120. [root@nfs01 scripts]# cd /backup/
  121. [root@nfs01 backup]# ll
  122. 总用量 4
  123. drwxr-xr-x 2 root root 4096 3月 18 17:11 172.16.1.31
  124. [root@backup backup]# ll
  125. 总用量 4
  126. drwxr-xr-x 2 rsync rsync 4096 3月 18 17:11 172.16.1.31
  127. [root@nfs01 scripts]# vim bak.sh
  128. IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')
  129. Path=/backup
  130. if [ $(date +%w) -eq 6 ]
  131. Then 这里的判断语句主要是为了分辨出星期六,因为星期六的备份要永久保留
  132. Time=$(date +%F-%w)
  133. else
  134. Time=$(date +%F)
  135. fi
  136. mkdir $Path/$IP/ -p
  137. cd / &&\
  138. tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sys
  139. config/iptables var/www/html app/logs &&\
  140. md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
  141. rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.pa
  142. ssword &&\
  143. find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs
  144. "bak.sh" 17L, 539C 已写入
  145. [root@nfs01 scripts]# date -s "2018/3/24" ==》修改时间是为了验证脚本
  146. 2018年 03月 24日 星期六 00:00:00 CST
  147. [root@nfs01 scripts]# sh bak.sh
  148. /backup/172.16.1.31/backup_2018-03-24-6.tar.gz /backup/172.16.1.31/flag_2018-03-24-6.log /backup/172.16.1.31/flag_2018-03-18.log /backup/172.16.1.31/flag_2018-04-22.log /backup/172.16.1.31/backup_2018-04-22.tar.gz /backup/172.16.1.31/backup_2018-03-18.tar.gz /backup/flag_2018-04-22.log /backup/backup_2018-04-22.tar.gz
  149. [root@backup backup]# ll
  150. 总用量 12
  151. drwxr-xr-x 2 rsync rsync 4096 3月 24 2018 172.16.1.31
  152. -rw-r--r-- 1 rsync rsync 761 4月 22 2018 backup_2018-04-22.tar.gz
  153. -rw-r--r-- 1 rsync rsync 68 4月 22 2018 flag_2018-04-22.log
  154. [root@backup backup]# cd 172.16.1.31/
  155. [root@backup 172.16.1.31]# ll
  156. 总用量 24
  157. -rw-r--r-- 1 rsync rsync 761 3月 18 17:14 backup_2018-03-18.tar.gz ==》两者对比,发现有不同之处
  158. -rw-r--r-- 1 rsync rsync 761 3月 24 2018 backup_2018-03-24-6.tar.gz
  159. -rw-r--r-- 1 rsync rsync 761 4月 22 2018 backup_2018-04-22.tar.gz
  160. -rw-r--r-- 1 rsync rsync 79 3月 18 17:14 flag_2018-03-18.log
  161. -rw-r--r-- 1 rsync rsync 81 3月 24 2018 flag_2018-03-24-6.log
  162. -rw-r--r-- 1 rsync rsync 79 4月 22 2018 flag_2018-04-22.log
  163. [root@nfs01 scripts]# cat bak.sh
  164. IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')
  165. Path=/backup
  166. if [ $(date +%w) -eq 0 ]
  167. then
  168. Time=$(date +%F-%w -d "-1day")
  169. else
  170. Time=$(date +%F -d "-1day")
  171. fi
  172. mkdir $Path/$IP/ -p
  173. cd / &&\
  174. tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
  175. md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
  176. rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.password &&\
  177. find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs
  178. rm -f
  179. [root@backup backup]# ll
  180. 总用量 20
  181. drwxr-xr-x 2 rsync rsync 4096 3月 24 2018 172.16.1.31
  182. -rw-r--r-- 1 rsync rsync 761 3月 24 2018 backup_2018-03-24-6.tar.gz
  183. -rw-r--r-- 1 rsync rsync 761 4月 22 2018 backup_2018-04-22.tar.gz
  184. -rw-r--r-- 1 rsync rsync 70 3月 24 2018 flag_2018-03-24-6.log
  185. -rw-r--r-- 1 rsync rsync 68 4月 22 2018 flag_2018-04-22.log
  186. [root@backup backup]# rm -rf *
  187. [root@backup backup]# ll
  188. 总用量 0
  189. [root@nfs01 scripts]# sh bak.sh
  190. /backup/172.16.1.31/backup_2018-03-24-6.tar.gz /backup/172.16.1.31/flag_2018-03-24-6.log /backup/172.16.1.31/flag_2018-03-18.log /backup/172.16.1.31/flag_2018-04-22.log /backup/172.16.1.31/flag_2018-03-23.log /backup/172.16.1.31/backup_2018-04-22.tar.gz /backup/172.16.1.31/backup_2018-03-18.tar.gz /backup/172.16.1.31/backup_2018-03-23.tar.gz /backup/backup_2018-03-24-6.tar.gz /backup/flag_2018-03-24-6.log /backup/flag_2018-04-22.log /backup/backup_2018-04-22.tar.gz
  191. [root@backup backup]# ll
  192. 总用量 20
  193. drwxr-xr-x 2 rsync rsync 4096 3月 24 2018 172.16.1.31
  194. -rw-r--r-- 1 rsync rsync 761 3月 24 2018 backup_2018-03-24-6.tar.gz
  195. -rw-r--r-- 1 rsync rsync 761 4月 22 2018 backup_2018-04-22.tar.gz
  196. -rw-r--r-- 1 rsync rsync 70 3月 24 2018 flag_2018-03-24-6.log
  197. -rw-r--r-- 1 rsync rsync 68 4月 22 2018 flag_2018-04-22.log
  198. [root@backup backup]# cd 172.16.1.31/
  199. [root@backup 172.16.1.31]# ll
  200. 总用量 32
  201. -rw-r--r-- 1 rsync rsync 761 3月 18 17:14 backup_2018-03-18.tar.gz
  202. -rw-r--r-- 1 rsync rsync 761 3月 24 2018 backup_2018-03-23.tar.gz
  203. -rw-r--r-- 1 rsync rsync 761 3月 24 2018 backup_2018-03-24-6.tar.gz
  204. -rw-r--r-- 1 rsync rsync 761 4月 22 2018 backup_2018-04-22.tar.gz
  205. -rw-r--r-- 1 rsync rsync 79 3月 18 17:14 flag_2018-03-18.log
  206. -rw-r--r-- 1 rsync rsync 79 3月 24 2018 flag_2018-03-23.log
  207. -rw-r--r-- 1 rsync rsync 81 3月 24 2018 flag_2018-03-24-6.log
  208. -rw-r--r-- 1 rsync rsync 79 4月 22 2018 flag_2018-04-22.log
  209. [root@nfs01 scripts]# vim bak.sh
  210. IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')
  211. Path=/backup
  212. if [ $(date +%w) -eq 0 ]
  213. then
  214. Time="week_$(date +%F_%w -d "-1day")"
  215. else
  216. Time=$(date +%F -d "-1day")
  217. fi
  218. mkdir $Path/$IP/ -p
  219. cd / &&\
  220. tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sys
  221. config/iptables var/www/html app/logs &&\
  222. md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
  223. rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.pa
  224. ssword &&\
  225. find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs rm -f
  226. "b[root@nfs01 scripts]# date
  227. 2016年 05月 01日 星期日 00:04:43 CST
  228. ak.sh" 17L, 568C 已写入
  229. [root@nfs01 scripts]# sh bak.sh
  230. /backup/172.16.1.31/backup_2018-03-24-6.tar.gz /backup/172.16.1.31/flag_2018-03-24-6.log /backup/172.16.1.31/flag_2018-03-18.log /backup/172.16.1.31/flag_2018-04-22.log /backup/172.16.1.31/flag_2018-03-23.log /backup/172.16.1.31/backup_2018-04-22.tar.gz /backup/172.16.1.31/backup_2018-03-18.tar.gz /backup/172.16.1.31/backup_2018-03-23.tar.gz /backup/backup_2018-03-24-6.tar.gz /backup/flag_2018-03-24-6.log /backup/flag_2018-04-22.log /backup/backup_2018-04-22.tar.gz
  231. [root@nfs01 scripts]# cd /backup/172.16.1.31/
  232. [root@nfs01 scripts]# ls /backup/
  233. 172.16.1.31 flag_2018-03-24-6.log
  234. backup_2018-03-24-6.tar.gz flag_2018-04-22.log
  235. backup_2018-04-22.tar.gz flag_week_2016-04-30_6.log
  236. backup_week_2016-04-30_6.tar.gz
  237. [root@backup scripts]# vim del_data.sh
  238. find /backup/ -type f -mtime +180 ! -name "*week*_6*"|xargs rm -f 删除180天以前的备份文件
  239. [root@backup backup]# find /backup/ -type f -mtime -7 ! -name "*week*_6*"
  240. /backup/172.16.1.31/backup_2018-03-24-6.tar.gz
  241. /backup/172.16.1.31/flag_2018-03-24-6.log
  242. /backup/172.16.1.31/flag_2018-03-18.log
  243. /backup/172.16.1.31/flag_2018-04-22.log
  244. /backup/172.16.1.31/flag_2018-03-23.log
  245. /backup/172.16.1.31/backup_2018-04-22.tar.gz
  246. /backup/172.16.1.31/backup_2018-03-18.tar.gz
  247. /backup/172.16.1.31/backup_2018-03-23.tar.gz
  248. /backup/backup_2018-03-24-6.tar.gz
  249. /backup/flag_2018-03-24-6.log
  250. /backup/flag_2018-04-22.log
  251. /backup/backup_2018-04-22.tar.gz
  252. [root@backup 172.16.1.31]# md5sum -c /backup/172.16.1.31/flag_week_2016-04-30_6.log
  253. /backup/172.16.1.31/backup_week_2016-04-30_6.tar.gz: 确定

在上面的脚本段中可能看的有点头大,下面我给出最终的脚本

最终的脚本


  
  
  1. [root@nfs01 ~]# cat /server/scripts/bak.sh
  2. IP=$(ifconfig eth1 |awk -F "[ :]+" 'NR==2 {print $4}')
  3. Path=/backup
  4. if [ $(date +%w) -eq 0 ]
  5. then
  6. Time="week_$(date +%F_%w -d "-1day")"
  7. else
  8. Time=$(date +%F -d "-1day")
  9. fi
  10. mkdir $Path/$IP/ -p
  11. cd / &&\
  12. tar zcfh $Path/$IP/backup_$Time.tar.gz var/spool/cron/root etc/rc.local etc/sysconfig/iptables var/www/html app/logs &&\
  13. md5sum $Path/$IP/backup_$Time.tar.gz >$Path/$IP/flag_$Time.log &&\
  14. rsync -az $Path/ [email protected]::backup --password-file=/etc/rsync.password &&\
  15. find /backup/ -type f -mtime -7 \( -name "*.log" -o -name "*.tar.gz" \) |xargs
  16. rm -f
  17. [root@backup scripts]# mv del_data.sh check_and_del.sh
  18. [root@backup scripts]# cat check_and_del.sh
  19. IP=$(ifconfig eth1|awk -F "[ :]+" 'NR==2 {print $4}')
  20. Path=/backup
  21. if [ $(date +%w) -eq 0 ]
  22. then
  23. Time="week_$(date +%F_%w -d "-1day")"
  24. else
  25. Time=$(date +%F -d "-1day")
  26. fi
  27. LANG=en
  28. find /backup/ -type f -name "*${Time}*.log"|xargs md5sum -c >>$Path/${Time}_result.log 2>&1 &&\
  29. mail -s "$Time bak result" [email protected] <$Path/${Time}_result.log
  30. find / backup/ -type f -mtime + 180 ! -name "* week* _6*"| xargs rm -f
  31. Or
  32. IP= $(ifconfig eth1| awk -F "[ :]+" ' NR== 2 { print $ 4}')
  33. Path= /backup
  34. if [ $( date +% w) -eq 0 ]
  35. then
  36. Time= "week_$(date +%F_%w -d " -1day")"
  37. else
  38. Time= $(date +% F -d " -1day")
  39. fi
  40. LANG= en
  41. find / backup/ -type f -name "*${ Time}* .log"| xargs md5sum -c >>$Path/${Time}_res
  42. ult.log 2>&1
  43. mail -s "$Time bak result" [email protected] <$Path/${Time}_result.log
  44. find / backup/ -type f -mtime + 180 ! -name "* week* _6*"| xargs rm -f

定时任务:


  
  
  1. [root@nfs01 scripts]# crontab -l
  2. */5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
  3. #bak all server bata
  4. 00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
  5. [root@backup scripts]# crontab -l
  6. */5 * * * * /usr/sbin/ntpdate time.nist.gov > /dev/null 2>&1
  7. ##check and del data by oldboy 20180319
  8. 00 04 * * * /bin/sh /server/scripts/check_and_del.sh >/dev/null 2>&1

里程碑3:

做检查:

检查验证文件在传输过程中是否存在错误---指纹验证

发邮件:配置mail使用外部SMTP发邮件

通过修改配置文件可以使用外部SMTP服务器,可以达到不使用sendmail/postfix等内部邮件服务而用外部的smtp服务器发送邮件的目的:

修改/etc/mail.rc最后一行加入

set [email protected] smtp=smtp.163.com smtp-auth-user=xiaxia_5321

Smtp-auth-password=shani123  smtp-auth=login

说明:

from是发送的邮件地址

smtp是发生的外部smtp服务器的地址

smtp-auth-user是外部smtp服务器认证的用户名

smtp-auth-password是外部smtp服务器认证的密码

Smtp-auth是外部smtp服务器认证的方式

set from=******@163.com smtp=stmp.163.com smtp-auth-user=******

smtp-auth-password=lk123123 smtp-auth=login

这里我是用临时注册网易邮箱来做的实验,用qq邮箱也可以,但有可能会被当作垃圾邮件处理,而且用的次数多了,可能邮箱会被封哦!

网易邮箱做此实验的前提是,需要设置客户端授权码为开启状态:

设置--POP3/SMTP/IMAP--客户端授权码--设置客户端授权码--开启--自己设置授权码(也就是smtp-auth-password的密码)

模拟数据


  
  
  1. [root@backup backup]# date
  2. 2018年 03月 19日 星期一 18:18:59 CST
  3. [root@backup backup]# date -s 20160426
  4. 2016年 04月 26日 星期二 00:00:00 CST
  5. [root@nfs01 backup]# seq 25 30 |awk '{print "date -s 201604"$0}'
  6. date -s 20160425
  7. date -s 20160426
  8. date -s 20160427
  9. date -s 20160428
  10. date -s 20160429
  11. date -s 20160430
  12. [root@nfs01 backup]# seq 25 30 |awk '{print "date -s 201604"$0"&&/bin/sh /server/scripts/bak.sh"}'|bash
  13. 2016年 04月 25日 星期一 00:00:00 CST
  14. /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log
  15. 2016年 04月 26日 星期二 00:00:00 CST
  16. /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/backup_2016-04-25.tar.gz
  17. 2016年 04月 27日 星期三 00:00:00 CST
  18. /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/flag_2016-04-26.log /backup/172.16.1.31/backup_2016-04-26.tar.gz /backup/172.16.1.31/backup_2016-04-25.tar.gz
  19. 2016年 04月 28日 星期四 00:00:00 CST
  20. /backup/172.16.1.31/flag_2016-04-27.log /backup/172.16.1.31/backup_2016-04-27.tar.gz /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/flag_2016-04-26.log /backup/172.16.1.31/backup_2016-04-26.tar.gz /backup/172.16.1.31/backup_2016-04-25.tar.gz
  21. 2016年 04月 29日 星期五 00:00:00 CST
  22. /backup/172.16.1.31/backup_2016-04-28.tar.gz /backup/172.16.1.31/flag_2016-04-28.log /backup/172.16.1.31/flag_2016-04-27.log /backup/172.16.1.31/backup_2016-04-27.tar.gz /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/flag_2016-04-26.log /backup/172.16.1.31/backup_2016-04-26.tar.gz /backup/172.16.1.31/backup_2016-04-25.tar.gz
  23. 2016年 04月 30日 星期六 00:00:00 CST
  24. /backup/172.16.1.31/backup_2016-04-28.tar.gz /backup/172.16.1.31/flag_2016-04-28.log /backup/172.16.1.31/flag_2016-04-27.log /backup/172.16.1.31/backup_2016-04-27.tar.gz /backup/172.16.1.31/backup_2016-04-24.tar.gz /backup/172.16.1.31/flag_2016-04-29.log /backup/172.16.1.31/flag_2016-04-24.log /backup/172.16.1.31/backup_2016-04-29.tar.gz /backup/172.16.1.31/flag_2016-04-25.log /backup/172.16.1.31/flag_2016-04-26.log /backup/172.16.1.31/backup_2016-04-26.tar.gz /backup/172.16.1.31/backup_2016-04-25.tar.gz
  25. [root@nfs01 backup]# ll
  26. 总用量 4
  27. drwxr-xr-x 2 root root 4096 4月 30 00:00 172.16.1.31
  28. [root@nfs01 backup]# ls 172.16.1.31/
  29. backup_2016-04-24.tar.gz backup_2016-04-28.tar.gz flag_2016-04-26.log
  30. backup_2016-04-25.tar.gz backup_2016-04-29.tar.gz flag_2016-04-27.log
  31. backup_2016-04-26.tar.gz flag_2016-04-24.log flag_2016-04-28.log
  32. backup_2016-04-27.tar.gz flag_2016-04-25.log flag_2016-04-29.log
  33. [root@backup backup]# sh /server/scripts/check_and_del.sh
  34. [root@backup backup]# mailq
  35. Mail queue is empty

成功!

总结

全网备份是一个运维人员必备的技术,本实验是在老男孩老师的帮助下完成的,这个实验不仅仅是对前一个阶段知识的总结,更是为后一个阶段的运维学习做基石,本次实验用了我一天的时间,中间出现了一些错误,因为是我个人的错误在这里我不之处了,上面的实验步骤很是详细,希望对喜欢学习运维的朋友们有一定的帮助。学习是一步一个脚印的,每一步都是未知,坚持才能有收获,希望朋友们不要轻言放弃;每一步都有收获,希望朋友们能做出自己的实验总结,将实验转化为自己的。另本实验是在虚拟机能上网的前提下进行!!!

猜你喜欢

转载自blog.csdn.net/m0_37574578/article/details/86221124