Linux系統crond、rsync、打包備份數據操作實戰

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、將腳本寫入定時任務,週期性進行備份數據

三:項目結構圖

wKiom1hH_QDBxkfLAACptUmJ7bA425.jpg-wh_50

四:備份服務器操作過程

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

如果需要定期執行此種操作,可以將上述配置寫成腳本 ,然後配置定時任務


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章