Linux系統crond、rsync、打包備份數據操作實戰
前面介紹了系統中定時任務、rsync、打包等各種操作,同時也介紹了實際生產環境中的各類案例,今天我們結合這幾種功能做一次實戰(備份數據)
一:項目背景
某公司WEB服務器數據非常重要,但是如果硬件出現故障,數據就會丟失,人工備份比較費時費力,因些需要進行相關自動備份,並且要備份至指定的備份服務器上
具體備份內容有:
1、網站站點所有目錄及相關文件
2、系統相關的配置文件
3、網站的訪問日誌文件
具體要求如下:(每天0點備份)
1、WEB服務器上的數據和備份服務器上的數據都存放在/backup/下(規範)
2、系統文件各類配置文件(定時任務、腳本等)
3、web服務器站點目錄(/var/web/www)
4、web服務器日誌目錄(/app/logs)
5、web服務器數據只保留7天內的備份內容,備份服務器上保留180天內的數據
6、備份服務器上的備份要求按照服務器IP爲目錄保存,備份的數據需按時間做爲文件名
二:需求分析
鑑於目前此種需求進行分析,可以得出操作思路爲
1、備份服務器B配置rsync服務,做爲服務端
2、web服務器配置爲rsync客戶端
3、web服務器上打包備份數據至指定的目錄/backup/下
4、然後利用rsync服務推送備份數據至備份服務器上
5、以上配置完成後,可手工測試,如果測試成功,可將上述配置打包寫成腳本
6、將腳本寫入定時任務,週期性進行備份數據
三:項目結構圖
四:備份服務器操作過程
1、服務器環境
[root@Backup ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@Backup ~]# uname -r
2.6.32-431.el6.x86_64
2、配置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服務器操作過程
1、服務器環境
[root@WEB ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@WEB ~]# uname -r
2.6.32-431.el6.x86_64
2、配置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
3、創建相應的目錄
[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
4、手工測試下推送數據是否成功
[root@WEB backup]# rsync -avzP /backup/ [email protected]::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
表明數據能成功推送至備份服務器相應的目錄下,同時說明上述配置正確
六、按要求打包需求中的各目錄
打包站目錄文件
[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/ [email protected]::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/ [email protected]::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
八:按要求重組腳本內容
1、web服務器數據只保留7天內的備份內容,備份服務器上保留180天內的數據
2、備份服務器上的備份要求按照服務器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 ./ [email protected]::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
腳本執行成功,表明腳本配置正確
九:配置定時任務
1、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
2、備份服務器上配置定時任務
[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
如果需要定期執行此種操作,可以將上述配置寫成腳本 ,然後配置定時任務