溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux自動代碼增量備份 結(jié)合 全量備份

發(fā)布時間:2020-03-23 09:37:31 來源:網(wǎng)絡 閱讀:658 作者:代碼老兵 欄目:編程語言

需求說明

系統(tǒng)環(huán)境:linux(centos7)
備份內(nèi)容:增量備份 結(jié)合 全量備份

公司中的生產(chǎn)服務器數(shù)據(jù)非常重要,所以我們需要通過備份服務器將生產(chǎn)服務器的數(shù)據(jù)進行備份。

rsync的增量備份,不單單會同步新增的內(nèi)容,就連刪除的內(nèi)容也會同步。假如管理代碼人員誤操作將代碼誤刪除,那么備份服務器檢測到備份原的數(shù)據(jù)產(chǎn)生變化后,也會與其同步,此時生產(chǎn)服務器與備份服務器的代碼都會丟失。

增量備份要求的頻率較高,但在生產(chǎn)與備份服務器之間的網(wǎng)絡資源消耗較少,所以我們可以使用rsync來做增量備份,然后結(jié)合在備份服務器本地內(nèi)做全量備份。
這樣不但減少了生產(chǎn)與備份服務器使用了全量備份的網(wǎng)絡資源開銷,還避免了數(shù)據(jù)大量丟失的情況。

增量備份

使用linux的rsync功能來增量備份開發(fā)代碼

服務器端

  • 安裝rsync

yum -y install rsync
  • 添加配置文件

如果沒有/etc/rsyncd.conf 文件,需要手動創(chuàng)建,如果有直接修改即可。

服務端配置文件/etc/rsyncd.conf 內(nèi)容如下:

# 在文件最下方添加內(nèi)容

pid file=/var/rsync/rsync.pid
port=873
lock file=/var/rsync/lock.log
log file=/var/rsync/rsync.log

[py_code]
path=/home/py/
use chroot=no
max connections=10
read only=yes
write only=no
list=no
uid=root
gid=root
auth users=root
secrets file=/etc/rsync_server.pas
strict modes=yes
hosts allow=*
#hosts deny=1.1.1.1
ignore errors=yes
timeout=120 #秒

參數(shù)說明:
[py_code] :模塊名,自己定義,可以在下方添加其它模塊。須與客戶端執(zhí)行命令中的模塊名一致。
path:要備份的服務端文件夾路徑。
hosts allow:允許的客戶端連接IP。
secrets file:服務端密碼文件,內(nèi)容格式為,用戶名:密碼。
auth users:有權(quán)限的用戶名,與密碼文件中用戶名一致。

  • 創(chuàng)建密碼文件

在/etc中創(chuàng)建文件rsync_server.pas,加入用戶名與密碼,內(nèi)容格式為:用戶名:密碼。

nano /etc/rsync_server.pas

例如,本例中rsync_server.pas文件內(nèi)容為root:123456

保存文件后,設置密碼文件權(quán)限為600

chmod 600 /etc/rsync_server.pas

注意密碼文件只有設置為600權(quán)限才可以使用,客戶端的密碼文件也必須為600。

  • 啟動與停止rsync服務
# 啟動rsync
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
# 停止rsync
ps -ef | grep rsync
kill -9 進程號
rm -rf /var/rsync/rsync.pid

我們測試的時候,一定要保證rsync服務是啟動的

客戶端

1.查看是否安裝rsync,系統(tǒng)一般默認已安裝,安裝方法:yum -y install rsync(同服務端)。
2.在/etc下創(chuàng)建密碼文件rsync_client.pas,注意內(nèi)容只有密碼,且與服務端密碼文件中的密碼相同。
3.更改密碼文件權(quán)限為600。

添加定時任務

在客戶端中添加定時任務,每天幾分鐘執(zhí)行命令從服務器端拉取數(shù)據(jù),進行備份。
直接編輯/etc/crontab文件,添加一條定時任務即可,例如每1分鐘以root身份執(zhí)行下方的rsync命令,將遠程服務器192.168.1.1中的py_code模塊對應的文件夾(服務端/etc/rsyncd.conf文件中的[py_code]模塊對應的文件夾路徑 )中的內(nèi)容增量備份到當前服務器的/home/py_backup目錄:


*/1 * * * * root rsync -aqzrtopg --delete rsync://root@192.168.1.1/py_code /home/py_backup --password-file=/etc/rsync_client.pas

命令中的root為服務端密碼文件中配置的用戶名;py_code為服務端/etc/rsyncd.conf文件中的[py_code]模塊名,rsync會通過模塊名找到對應的備份文件路徑;
/home/py_backup是當前服務器文件夾路徑,遠程服務器需要備份的文件夾里的內(nèi)容會增量備份到這里,所以需要提前建好該目錄;
/etc/rsync_client.pas為當前服務器的密碼文件。
當直接執(zhí)行上方備份命令時,可以加入-v --progress參數(shù), 即顯示具體備份過程信息,定時任務中則不需要。

此外,使用crontab -e命令也可以直接配置定時任務,但與vi /etc/crontab不同,不同點如下:
1./etc/crontab中的為系統(tǒng)任務,只有root可以設定,而crontab -e設置的定時任務為用戶任務,設定完成后會將任務自動寫入/var/spool/cron/usename文件。
2./etc/crontab中的任務需要指定用戶名,crontab -e不需要。

  1. crontab -e 編輯完后需要重啟服務,systemctl restart crond.service

    • 時間定義說明
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

每天零點執(zhí)行備份命令
00 00 * * * shell命令

每天零點和12點執(zhí)行備份命令
00 00,12 * * * shell命令

全量備份

下面要做的是在linux中,將linux文件定時全量備份,且每次備份的文件名不同,還要刪除超過指定時間的歷史備份文件。

將 /home/py 全量備份到/home/back下

cd /home/back   #進入到備份目錄下
nano backup.sh  #創(chuàng)建一個備份腳本,這個腳本也可以放到其他目錄中(自定義)

# backup.sh中寫內(nèi)容如下:

#!/bin/sh
cp -r /home/py /home/back  #將數(shù)據(jù)copy到備份目錄,先copy是因為怕在壓縮的過程當中源文件產(chǎn)生變化

tar -czvf /home/back/$(date +%Y%m%d).tar.gz /home/back/py  # 將copy過來的/home/back/py文件目錄進行壓縮,使用日期當做新壓縮文件名字存入到/home/back中;

rm -rf /home/back/py  # 刪除copy過來的文件,保留壓縮過的文件就好

find ./ -mtime +30 -name "*.tar.gz" -exec rm -rf {} \;  # 查找并刪除超過30天的.tar.gz文件,來避免全量備份的歷史文件過多導致占用大量的磁盤空間。

chmod -R 777 backup.sh  # 修改腳本文件的權(quán)限,否則會自動執(zhí)行失敗,提示無權(quán)限

crontab -e  # 修改crontab

# 在crontab中寫內(nèi)容如下:
59 23 * * * /home/back/backup.sh  # 每天23點59分運行backup.sh腳本。可以根據(jù)需求修改時間,或定義多個執(zhí)行計劃。
# 保存退出該文件后重啟crontab服務

systemctl restart crond.service  # 重啟crontab服務
向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI