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)
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 -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
定時做好後我們去服務端看一下
果真做好了,大功告成