1. 程式人生 > >rsync+shell指令碼完成自動化備份

rsync+shell指令碼完成自動化備份

因為知識有些零碎所以認真看,我們還是首先介紹一下什麼是rsync

rsync是linux系統下的資料映象備份工具。使用快速增量備份工具Remote Sync可以遠端同步,支援本地複製,或者與其他SSH、rsync主機同步。Rsync其實是一個遠端資料同步工具,可通過LAN/WAN快速同步多臺主機間的檔案。rsync使用所謂的“rsync演算法”來使本地和遠端兩個主機之間的檔案達到同步,這個演算法只傳送兩個檔案的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大的工具,其命令也有很多功能特色選項。 

它的特性如下:

可以映象儲存整個目錄樹和檔案系統。

可以很容易做到保持原來檔案的許可權、時間、軟硬連結等等。

無須特殊許可權即可安裝。

快速:第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的檔案。rsync 在傳輸資料的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的頻寬。

安全:可以使用scp、ssh等方式來傳輸檔案,當然也可以通過直接的socket連線。

支援匿名傳輸,以方便進行網站鏡象。

準備階段:(客戶端和服務端)

[[email protected] ~]# cat /etc/redhat-release         #檢視系統版本

CentOS Linux release 7.2.1511 (Core)

[[email protected]

~]# uname -r                            #檢視系統核心版本

3.10.0-327.el7.x86_64

[[email protected] ~]# uname -m                           #檢視系統是否64位

x86_64

首先我們還是做服務之前先把奇葩的防火牆給關掉,因為很多規則會撞到牆,注意是服務端和客戶端都要做這個操作

[[email protected] ~]# iptables -F

[[email protected] ~]# iptables -X

[[email protected]

~]# iptables -Z

[[email protected] ~]# iptables -L    

[[email protected] ~]# setenforce 0

[[email protected] ~]#vi /etc/sysconfig/selinux               #修改SELINUX

首先兩個虛擬機器,一個是客戶端一個是服務端

[[email protected] ~]# yum -y install rsync              #安裝rsync服務

[[email protected] ~]# systemctl start rsyncd.service

[[email protected] ~]# systemctl enable rsyncd.service

[[email protected] ~]# netstat -lnp|grep 873            #檢查是否已經成功啟動

[[email protected] lala]# vi /root/lala/11.txt              #為了測試我建立了一個TxT記事本

[[email protected] lala]#    #遠端被檔案傳輸過去

然後我們切換到服務端看一下

然後我們把服務端這個txt檔案給刪除,我們再用一種不需要密碼的方式來進行傳輸。

[[email protected] ~]# rm -rfv 11.txt

為了讓兩個linux機器之間使用ssh不需要使用者名稱和密碼。所以採用了數字簽名RSA或者DSA來完成這個操作。客戶端和服務端都要進行接下來的步驟

[[email protected] ~]# ssh-keygen            #客戶端生成金鑰

[[email protected] ~]# ssh-keygen            #服務端生成金鑰

[[email protected] ~]# cat /root/.ssh/id_rsa.pub

[[email protected] ~]# cat /root/.ssh/id_rsa.pub

兩個節點都執行操作:#ssh-keygen然後全部回車,採用預設值.

[[email protected] ~]# vi /root/.ssh/authorized_keys

[[email protected] ~]# vi /root/.ssh/authorized_keys

[[email protected] ~]#         #我們再從客戶端嘗試一次發現沒有了密碼這就已經成功了

回到服務端發現文件已經傳過來了

本著作死的節奏,我們刪除了這個文件再來一個定時指令碼嘗試一下

[[email protected] ~]# vi copy.sh

#!/bin/bash

scp -r /root/lala/11.txt [email protected]:/root/

[[email protected] ~]# cat copy.sh                   #我們看一下指令碼的許可權

[[email protected] ~]# chmod 777 copy.sh       #感覺許可權有點低,給它一個許可權。

[[email protected] ~]# ./copy.sh         #首先測試一下指令碼看看好用不

[[email protected] ~]# ls                  #發現已經有txt了

定時指令碼就涉及到一個目錄crontab,還是先介紹一下crontab檔案的含義:

使用者所建立的crontab檔案中,每一行都代表一項任務,每行的每個欄位代表一項設定,它的格式共分為六個欄位,前五段是時間設定段,第六段是要執行的命令段,格式如下:

minute   hour   day   month   week   command

其中:

minute: 表示分鐘,可以是從0到59之間的任何整數。

hour:表示小時,可以是從0到23之間的任何整數。

day:表示日期,可以是從1到31之間的任何整數。

month:表示月份,可以是從1到12之間的任何整數。

week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。

command:要執行的命令,可以是系統命令,也可以是自己編寫的指令碼檔案。

[[email protected] ~]# crontab -e                    #編輯該使用者的計時器設定;

* * * * *  bash /root/copy.sh      我設定的是每分鐘都會去執行一下這個指令碼

[[email protected] ~]# crontab -l                     #-l:列出該使用者的計時器設定;

* * * * *  bash /root/copy.sh

定時做好後我們去服務端看一下

果真做好了,大功告成