Linux系統crond、rsync、打包備份數據操做實戰web
前面介紹了系統中定時任務、rsync、打包等各類操做,同時也介紹了實際生產環境中的各種案例,今天咱們結合這幾種功能作一次實戰(備份數據)bash
一:項目背景
服務器
某公司WEB服務器數據很是重要,可是若是硬件出現故障,數據就會丟失,人工備份比較費時費力,因些須要進行相關自動備份,而且要備份至指定的備份服務器上app
具體備分內容有:tcp
一、網站站點全部目錄及相關文件ide
二、系統相關的配置文件測試
三、網站的訪問日誌文件網站
具體要求以下:(天天0點備份)ui
一、WEB服務器上的數據和備份服務器上的數據都存放在/backup/下(規範)spa
二、系統文件各種配置文件(定時任務、腳本等)
三、web服務器站點目錄(/var/web/www)
四、web服務器日誌目錄(/app/logs)
五、web服務器數據只保留7天內的備分內容,備份服務器上保留180天內的數據
六、備份服務器上的備份要求按照服務器IP爲目錄保存,備份的數據需按時間作爲文件名
二:需求分析
鑑於目前此種需求進行分析,能夠得出操做思路爲
一、備份服務器B配置rsync服務,作爲服務端
二、web服務器配置爲rsync客戶端
三、web服務器上打包備份數據至指定的目錄/backup/下
四、而後利用rsync服務推送備份數據至備份服務器上
五、以上配置完成後,可手工測試,若是測試成功,可將上述配置打包寫成腳本
六、將腳本寫入定時任務,週期性進行備份數據
三:項目結構圖
四:備份服務器操做過程
一、服務器環境
[root@Backup ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@Backup ~]# uname -r
2.6.32-431.el6.x86_64
二、配置rsync操做過程
[root@Backup ~]# cat /etc/rsyncd.conf
cat: /etc/rsyncd.conf: No such file or directory
若是有此文件,配置前要進行備份,再進行相關配置
配置rsync服務
[root@Backup ~]# cat /etc/rsyncd.conf
##rsync config start
##created by root 2016-08-08 15:00
##rsync.conf config start
uid = rsync
gid = rsync
use chroot = no
max connetctions = 200
timeout = 100
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[rsync]
path = /backup/
ignore errors
read only = false
list = false
hosts allow = 192.168.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
##rsync config end
添加用戶
[root@Backup ~]# useradd rsync -s /sbin/nologin -M
改變目錄權限
[root@Client ~]# chown -R rsync.rsync /backup
配置密碼文件
[root@Backup ~]# echo "rsync_backup:rsync.conf">>/etc/rsync.password
[root@Backup ~]# cat /etc/rsync.password
rsync_backup:rsync.conf
改變密碼文件權限
[root@Backup ~]# chmod 600 /etc/rsync.password
[root@Backup ~]# ls -ld /etc/rsync.password
-rw-------. 1 root root 24 Sep 9 13:06 /etc/rsync.password
格式化文件
[root@Backup ~]# dos2unix /etc/rsyncd.conf
dos2unix: converting file /etc/rsyncd.conf to UNIX format ...
開啓服務後臺運行
[root@Backup ~]# rsync --daemon
[root@Backup ~]# netstat -lntup|grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 2002/rsync
tcp 0 0 :::873 :::* LISTEN 2002/rsync
將服務開啓命令寫入開機自啓當中
[root@Backup ~]# echo "##web backup by root 20160808">>/etc/rc.local;echo "/usr/bin/rsync --daemon">>/etc/rc.local
五:WEB服務器操做過程
一、服務器環境
[root@WEB ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@WEB ~]# uname -r
2.6.32-431.el6.x86_64
二、配置rsyncp客戶端
[root@WEB ~]# echo "rsync.conf">>/etc/rsync.password
[root@WEB ~]# cat /etc/rsync.password
rsync.conf
[root@WEB ~]# chmod 600 /etc/rsync.password
[root@WEB ~]# ls -ld /etc/rsync.password
-rw-------. 1 root root 11 Sep 8 06:25 /etc/rsync.password
三、建立相應的目錄
[root@WEB /]# mkdir /backup/
[root@WEB /]# mkdir /var/web/www -p
[root@WEB /]# mkdir /app/logs -p
[root@WEB /]# tree /var/web
/var/web
+-- www
[root@WEB /]# tree /app
/app
+-- logs
四、手工測試下推送數據是否成功
[root@WEB backup]# rsync -avzP /backup/ rsync_backup@192.168.1.3::rsync --password-file=/etc/rsync.password
sending incremental file list
./
a
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=3/5)
b
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=2/5)
c
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=1/5)
d
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=0/5)
sent 197 bytes received 87 bytes 568.00 bytes/sec
total size is 0 speedup is 0.00
[root@Backup ~]# cd /backup/
[root@Backup backup]# tree
+-- a
+-- b
+-- c
+-- d
代表數據能成功推送至備份服務器相應的目錄下,同時說明上述配置正確
6、按要求打包需求中的各目錄
打包站目錄文件
[root@WEB web]# tar zcvf /backup/www_$(date +%F).tar.gz ./www
./www/
[root@WEB web]# ls /backup/
www_2016-09-09.tar.gz
打包日誌文件
[root@WEB app]# tar zcvf /backup/log_$(date +%F).tar.gz ./logs
[root@WEB app]# ls /backup/
log_2016-09-09.tar.gz www_2016-09-09.tar.gz
打包系統配置文件
[root@WEB /]# tar zcvf /backup/etc_$(date +%F).tar.gz ./etc
[root@WEB /]# ls /backup/
etc_2016-09-09.tar.gz log_2016-09-09.tar.gz www_2016-09-09.tar.gz
打包定時任務文件
[root@WEB ~]# cp /var/spool/cron/root /backup/root_$(date +%F)
[root@WEB ~]# ls /backup/
etc_2016-09-09.tar.gz root_2016-09-09
log_2016-09-09.tar.gz www_2016-09-09.tar.gz
打包系統腳本文件
[root@WEB ~]# cd /server/
[root@WEB server]# tar zcvf /backup/scripts_$(date +%F).tar.gz ./scripts
./scripts/
[root@WEB server]# ls /backup/
etc_2016-09-09.tar.gz root_2016-09-09 www_2016-09-09.tar.gz
log_2016-09-09.tar.gz scripts_2016-09-09.tar.gz
手工推送測試數據備份是否成功
[root@WEB server]# rsync -avzP /backup/ rsync_backup@192.168.1.3::rsync --password-file=/etc/rsync.password
sending incremental file list
./
etc_2016-09-09.tar.gz
9949927 100% 34.90MB/s 0:00:00 (xfer#1, to-check=4/6)
log_2016-09-09.tar.gz
112 100% 0.40kB/s 0:00:00 (xfer#2, to-check=3/6)
root_2016-09-09
204 100% 0.74kB/s 0:00:00 (xfer#3, to-check=2/6)
scripts_2016-09-09.tar.gz
114 100% 0.41kB/s 0:00:00 (xfer#4, to-check=1/6)
www_2016-09-09.tar.gz
109 100% 0.39kB/s 0:00:00 (xfer#5, to-check=0/6)
sent 9954208 bytes received 106 bytes 19908628.00 bytes/sec
total size is 9950466 speedup is 1.00
[root@Backup backup]# ls
etc_2016-09-09.tar.gz log_2016-09-09.tar.gz root_2016-09-09
scripts_2016-09-09.tar.gz www_2016-09-09.tar.gz
數據備份成功,一樣符合當前要求
七:書寫備份腳本
備份網站站點目錄與日誌文件
###backup web and logs to backup directory
cd /var/web/ && tar zcf /backup/www_$(date +%F).tar.gz ./www
cd /app/ && tar zcf /backup/log_$(date +%F).tar.gz ./logs
備份系統配置文件
###bakcup configrue of system to backup directory
cd / && tar zcf /backup/etc_$(date +%F).tar.gz ./etc
cd /server/ tar zcf /backup/scripts_$(date +%F).tar.gz ./scripts
cp /var/spool/cron/root /backup/root_$(date +%F)
推送數據到備份服務器
###rsync data of backup to backup servers directory
cd /backup/ && rsync -avzP /backup/ rsync_backup@192.168.1.3::rsync --password-file=/etc/rsync.password >/dev/null 2>&1
刪除7天前的備份數據
###delete data of 7days ago
find /backup -type f -name "*.tar.gz" -mtime +7|xrags rm -f
八:按要求重組腳本內容
一、web服務器數據只保留7天內的備分內容,備份服務器上保留180天內的數據
二、備份服務器上的備份要求按照服務器IP爲目錄保存,備份的數據需按時間作
爲了規範特定將腳本文件放到/server/scripts/下面
cd /server/scripts/
vi backup.sh
#!/bin/bash
ip=`grep IPADD /etc/sysconfig/network-scripts/ifcfg-eth0|cut -d = -f2`
mkdir /backup/$ip -p
配置變量
##backup web and logs data to backup directory
cd /var/web/ && tar zcf /backup/$ip/www_$(date +%F).tar.gz ./www
cd /app/ && tar zcf /backup/$ip/log_$(date +%F).tar.gz ./logs
###backup configrue of system to backup directory
cd / && tar zcf /backup/$ip/etc_$(date +%F).tar.gz ./etc
cd /server/ && tar zcf /backup/$ip/scripts_$(date +%F).tar.gz ./scripts
cp /var/spool/cron/root /backup/$ip/root_$(date +%F)
##rsync data of backup to backup servers directory
cd /backup/ && rsync -avzP ./ rsync_backup@192.168.1.3::rsync --password-file=/etc/rsync.password>/dev/null 2>&1
##delete data of 7 days ago
find /backup -type f -name "*.tar.gz" -mtime +7|xargs rm -f
[root@WEB scripts]# cd /backup/
[root@WEB backup]# ls
[root@WEB backup]# /bin/sh /server/scripts/backup.sh
[root@WEB backup]# ls -ll
total 4
drwxr-xr-x. 2 root root 4096 Sep 9 23:02 192.168.1.2
[root@WEB backup]# cd 192.168.1.2/
[root@WEB 192.168.1.2]# ls
etc_2016-09-09.tar.gz log_2016-09-09.tar.gz root_2016-09-09
scripts_2016-09-09.tar.gz www_2016-09-09.tar.gz
腳本執行成功,代表腳本配置正確
九:配置定時任務
一、WEB服務器上配置定時任務
[root@WEB ~]# crontab -e
##backup web server data to backup-server by 20160808
00 00 * * * /bin/sh /server/scripts/backup.sh>/dev/null 2>&1
[root@WEB ~]# crontab -l
##backup web server data to backup-server by 20160808
00 00 * * * /bin/sh /server/scripts/backup.sh>/dev/null 2>&1
二、備份服務器上配置定時任務
[root@Backup ~]# mkdir /server/scripts/ -p
[root@Backup ~]# cd /server/scripts/
[root@Backup scripts]# vi delete.sh
###delete data of 180 days ago
find /backup -type f -name "*.tar.gz" -mtime +180|xargs rm -f
[root@Backup ~]# crontab -e
##delete data by 20160808
00 00 * * 6 /bin/sh /server/scripts/delete.sh>dev/null 2>&1
[root@Backup ~]# crontab -l
##delete data by 20160808
00 00 * * 6 /bin/sh /server/scripts/delete.sh>dev/null 2>&1
十:測試數據備份結果
手工測試
[root@WEB backup]# rm -rf *
[root@WEB backup]# /bin/sh /server/scripts/backup.sh
[root@WEB backup]# ls -ll
total 4
drwxr-xr-x. 2 root root 4096 Sep 9 23:22 192.168.1.2
[root@WEB backup]# ls 192.168.1.2/
etc_2016-09-09.tar.gz root_2016-09-09 www_2016-09-09.tar.gz
log_2016-09-09.tar.gz scripts_2016-09-09.tar.gz
[root@Backup backup]# rm -rf *
[root@Backup backup]# ls
192.168.1.2
[root@Backup backup]# ls 192.168.1.2/
etc_2016-09-09.tar.gz root_2016-09-09 www_2016-09-09.tar.gz
log_2016-09-09.tar.gz scripts_2016-09-09.tar.gz
手工測試正常,數據備份、推送成功
測試定時任務
[root@WEB backup]# rm -rf * 刪除以前手工測試數據
[root@WEB backup]# date
Fri Sep 9 23:26:08 CST 2016
[root@WEB backup]# date 090923592016.55 修改當前系統時間
Fri Sep 9 23:59:55 CST 2016
[root@WEB backup]# date 查看當前系統時間
Sat Sep 10 00:00:36 CST 2016
[root@WEB backup]# ls
192.168.1.2
[root@WEB backup]# ls 192.168.1.2/ 查看定時任務執行狀況
etc_2016-09-10.tar.gz root_2016-09-10 www_2016-09-10.tar.gz
log_2016-09-10.tar.gz scripts_2016-09-10.tar.gz
[root@Backup backup]# rm -rf * 刪除以前手工測試數據
[root@Backup backup]# ls
[root@Backup backup]# ls -ll
total 4
drwxr-xr-x. 2 rsync rsync 4096 Sep 9 19:00 192.168.1.2
[root@Backup backup]# ls 192.168.1.2/ 查看數據備份狀況
etc_2016-09-10.tar.gz root_2016-09-10 www_2016-09-10.tar.gz
log_2016-09-10.tar.gz scripts_2016-09-10.tar.gz
通過測試數據備份成功,而且正常推送到備份服務器指定目錄下,代表定時任務執行成功
十一:下載服務器的數據至本地
爲了方便往後維護與管理,能夠將服務器的數據下載到本地,後續有故障時可直接上傳到指定服便可恢復數據
[root@WEB backup]# tar zcvf 192.168.1.2_data.tar.gz ./192.168.1.2/
[root@WEB backup]# sz -y 192.168.1.2_data.tar.gz
[root@Backup backup]# sz -y /etc/rsyncd.conf
若是須要按期執行此種操做,能夠將上述配置寫成腳本 ,而後配置定時任務