linux實(shí)現(xiàn)對(duì)上傳文件的定時(shí)備份、增量備份的方法
介紹
如果你們使用的是類似阿里云的OSS存儲(chǔ)服務(wù),那么可以使用服務(wù)提供的定時(shí)備份,這樣可以不用考慮在服務(wù)器上做文件備份。
實(shí)際上想實(shí)現(xiàn)基礎(chǔ)的備份還是非常簡(jiǎn)單的,我們平常使用tar、unzip等命令打包文件,在這個(gè)基礎(chǔ)上編寫一個(gè)shell腳本,利用linux的crontab功能添加一個(gè)定時(shí)執(zhí)行程序,這樣就可以簡(jiǎn)單實(shí)現(xiàn)文件備份。但是這種方式在文件量不斷增大后還行嗎?答案肯定是不行,當(dāng)文件量不斷增加,所占存儲(chǔ)空間增大。這種簡(jiǎn)單的備份方式會(huì)讓壓縮時(shí)間過長(zhǎng),占用過多的存儲(chǔ)空間。那么怎么解決這一問題呢?我們可以使用增量備份來避免每一次都對(duì)所有文件進(jìn)行備份壓縮而帶來的時(shí)間和空間的問題。
下面介紹一下實(shí)現(xiàn)方式(linux系統(tǒng)環(huán)境)
在編寫腳本之前需要先查看一下服務(wù)器上是否有crontab功能
注:在這里要贊一下這個(gè)crontab功能,確實(shí)十分實(shí)用
使用 rpm -qa|grep crontab命令查看是否已安裝crontab
上圖所示,表明已安裝。
如果未安裝,則使用yum命令進(jìn)行安裝
yum -y install vixie-cron yum -y install crontabs
vixie-cron 是 cron 的主程序;
crontabs 是用來安裝、卸裝、或列舉用來驅(qū)動(dòng) cron 守護(hù)進(jìn)程的表格的程序。
如果是內(nèi)網(wǎng)環(huán)境,需要離線安裝的可找要離線安裝包
1.啟動(dòng):systemctl start crond.service
2.查看狀態(tài):systemctl status crond.service
上圖所示,表明crontab已經(jīng)在運(yùn)行
下面貼上常用命令
systemctl start crond.service //啟動(dòng)命令 systemctl status crond.service //查看狀態(tài) systemctl stop crond.service //關(guān)閉命令 systemctl restart crond.service //重啟 systemctl enable crond.service //開機(jī)運(yùn)行
有人用的不是systemctl命令,特此貼出service常用命令
service crond start //啟動(dòng)服務(wù) service crond stop //關(guān)閉服務(wù) service crond restart //重啟服務(wù) service crond reload //重新載入配置 service crond status //查看crontab服務(wù)狀態(tài)
創(chuàng)建腳本文件
vim backup.sh
寫入腳本命令(注:這個(gè)腳本是從網(wǎng)上找的,未找到原出處)
#!/bin/bash #好的做法 #根據(jù)項(xiàng)目不同來重命名該腳本 #例如 amountebak.sh or pandawillsbak.sh #該腳本最好放在 $bakpp定義的絕對(duì)路徑部分 #你可以 在$bakpp下找到相應(yīng)的備份文件 #例如 /usr/backup/amountebak.sh or /usr/backup/pandawillsbak.sh ########## Init Path ######## # 在下面的參數(shù)中必須定義的參數(shù)有 $bakpp、$project、$projectpp TAR=/bin/tar # 存放備份文件的地方,以項(xiàng)目名稱區(qū)分 bakpp=/data/file_backup/"$project" # 需要備份的文件夾,文件夾的路徑 project=file projectpp=/data/ # parament for varible ym=`date +%Y%m` ymd=`date +%Y%m%d` # 存儲(chǔ)備份文件的子目錄,以月份區(qū)分,他的上級(jí)目錄是$bakpp定義的 monthbakpp=$bakpp/$ym gidpp=$monthbakpp gidshot=gid$project$ym # 完全備份的文件名 fullname=$ym # 增量備份的文件名 incrementalname=$ymd # Record the location of the log log=$bakpp/$project.log ############ chk_full ####################### # 檢查完全備份是否存在,如果不存在就創(chuàng)建它 #this function check fullbackup file exist or not , if not then create fullbackup now chk_full() { if [ -e "$monthbakpp"/"$project"_"$ym"_full.tar.gz ];then echo ""$project"_"$ym"_full.tar.gz file exist!! ====`date +%Y-%m-%d-%T` " >>$log else tar_full fi } ######### chk_incremental ######## # 檢查增量備份是否存在 chk_incremental() { while [ -e "$monthbakpp"/"$project"_"$incrementalname"_incremental.tar.gz ] do incrementalname=`echo "$incrementalname + 0.1" | bc ` done } ######## tar_incremental ####### # 執(zhí)行增量備份 tar_incremental() { cd $projectpp echo "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$incrementalname"_incremental.tar.gz" >> $log sleep 3 $TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$incrementalname"_incremental.tar.gz $project echo "END_TIME========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$incrementalname"_incremental.tar.gz" >> $log } ######## tar_full ########### tar_full() { touch $gidpp/$gidshot cd $projectpp echo "BEIGIN_TIME=====`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullname"_full.tar.gz" >> $log $TAR -g $gidpp/$gidshot -zcf $monthbakpp/"$project"_"$fullname"_full.tar.gz $project echo "END_TIME========`date +%Y-%m-%d-%T` ==== CREATE "$project"_"$fullname"_full.tar.gz" >> $log } ########### backup ############################## # 總體調(diào)用備份,此時(shí)會(huì)做相應(yīng)的檢查以確保備份前提準(zhǔn)備充分 backup() { if [ -d $monthbakpp ]; then chk_full chk_incremental tar_incremental else mkdir -p $bakpp/$ym tar_full fi } ########### let's begin ############# # 先檢查$bakpp是否存在,如果不存在先創(chuàng)建后備份 if [ -d $bakpp ];then backup else mkdir -p $bakpp backup fi #advice you can create a file for put backup file, eg /usr/cctcc #crontab #mini hours day month week command # */5 * * * * /home/mmroot/zbb/aaa.sh # 0 1 */1 * * /home/mmroot/zbb/aaa.sh # tar -ztf test.tar.gz 查看備份文件里面的文件
使用wq!命令保存文件
這個(gè)腳本文件有三處地方需要注意一下:
#存放備份文件的地方,以項(xiàng)目名稱區(qū)分
bakpp=/data/file_backup/"$project"
#需要備份的文件夾,文件夾的路徑
project=file
projectpp=/data/
上面的三個(gè)路徑要根據(jù)自己具體情況進(jìn)行更改
添加定時(shí)任務(wù):輸入命令
crontab -e
任務(wù)示例
05 03 * * * cd /data/file_backup/;sh file_backup.sh
然后使用 crontab -l 查看即可。
在備份完成后,可使用命令查看備份文件里面的文件
tar -ztf file.tar.gz //查看備份文件面文件
好了,到此定時(shí)備份、增量備份就結(jié)束了。
特此說明:更安全的方式是另找一個(gè)服務(wù)器做文件備份存儲(chǔ)服務(wù)器。在本機(jī)完成定時(shí)備份、增量備份后,將文件推送到文件備份存儲(chǔ)服務(wù)器。這樣可以保證在磁盤損壞的情況下達(dá)到備份功能
到此這篇關(guān)于linux實(shí)現(xiàn)對(duì)上傳文件的定時(shí)備份、增量備份的文章就介紹到這了,更多相關(guān)linux 上傳文件備份內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Linux shell實(shí)現(xiàn)每天定時(shí)備份mysql數(shù)據(jù)庫(kù)
- linux實(shí)現(xiàn)mysql數(shù)據(jù)庫(kù)每天自動(dòng)備份定時(shí)備份
- MySQL定時(shí)備份之使用Linux下的crontab定時(shí)備份實(shí)例
- linux每天定時(shí)備份數(shù)據(jù)庫(kù)并刪除十天前數(shù)據(jù)詳細(xì)步驟
- linux實(shí)現(xiàn)定時(shí)備份mysql數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
- linux定時(shí)備份MySQL數(shù)據(jù)庫(kù)并刪除以前的備份文件(推薦)
- Linux 上 定時(shí)備份postgresql 數(shù)據(jù)庫(kù)的方法
- 給Linux定時(shí)備份數(shù)據(jù)庫(kù)的實(shí)現(xiàn)腳本
- Linux VPS備份教程 數(shù)據(jù)庫(kù)/網(wǎng)站文件自動(dòng)定時(shí)備份
- linux中數(shù)據(jù)庫(kù)的定時(shí)備份
相關(guān)文章
Ubuntu Server 10.04修改Apache的默認(rèn)目錄的方法
這篇文章主要為大家分享下Ubuntu Server 10.04修改Apache的默認(rèn)目錄的方法,需要的朋友可以參考下2013-12-12Linux創(chuàng)建進(jìn)程達(dá)到65535的方法
這篇文章主要介紹了Linux創(chuàng)建進(jìn)程達(dá)到65535的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07keepalived實(shí)現(xiàn)nginx高可用
這篇文章主要為大家詳細(xì)介紹了keepalived實(shí)現(xiàn)nginx高可用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10簡(jiǎn)單了解Linux性能監(jiān)控命令free
這篇文章主要介紹了簡(jiǎn)單了解Linux性能監(jiān)控命令free,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07使用Apache ab工具對(duì)Apache服務(wù)器進(jìn)行簡(jiǎn)單的壓力測(cè)試
這篇文章主要介紹了使用Apache ab工具對(duì)Apache服務(wù)器進(jìn)行簡(jiǎn)單的壓力測(cè)試的方法,文中還對(duì)如何查看當(dāng)前Apache的連接數(shù)的方法作了介紹,需要的朋友可以參考下2016-03-03詳解Linux驅(qū)動(dòng)中,probe函數(shù)何時(shí)被調(diào)用
這篇文章主要介紹了詳解Linux驅(qū)動(dòng)中,probe函數(shù)何時(shí)被調(diào)用 ,具有一定的參考價(jià)值,有興趣的同學(xué)可以了解一下。2016-12-12