1. 程式人生 > >Linux下利用七牛雲和crontab實現定時自動備份

Linux下利用七牛雲和crontab實現定時自動備份

linux自帶crontab定時任務

mysql自帶mysqldump 

系統自帶壓縮工具

然後參考以下兩篇文章:

簡介

qrsync 是一個根據七牛雲端儲存API實現的簡易命令列輔助上傳同步工具,支援斷點續上傳,增量同步,它可將使用者本地的某目錄的檔案同步到七牛雲端儲存中,同步或上傳幾百GB甚至上TB的檔案毫無鴨梨。

注意:被同步的檔名和路徑必須是utf8編碼,非utf8的檔名和路徑將會同步失敗

下載

qrsync 命令列輔助同步工具下載地址:

用法

先建立一個配置檔案,比如叫 conf.json,內容大體如下:

{
    "access_key": "Please apply your access key here"
, "secret_key": "Dont send your secret key to anyone", "bucket": "Bucket name on qiniu resource storage", "sync_dir": "Local directory to upload", "async_ops": "fop1;fop2;fopN", "debug_level": 1 }

配置檔案語法可以參考 JSON 。

其中,access_key 和 secret_key 在七牛雲端儲存平臺上申請。步驟如下:

bucket 是你在七牛雲端儲存上希望儲存資料的 Bucket 名(類似於資料庫的表),這個自己選擇一個合適的就可以,要求是隻能由字母、數字、下劃線等組成。

sync_dir 是本地需要上傳的目錄,絕對路徑完整表示。這個目錄中的所有內容會被同步到指定的 bucket 上。注意:Windows 平臺上路徑的表示格式為:碟符:/目錄,比如 E 盤下的目錄 data 表示為:e:/data 。

async_ops 是設定上傳預轉引數,一般上傳的音視訊如果需要轉碼,可以使用該引數。詳情參考:音視訊上傳預轉 - asyncOps

可以在 七牛雲端儲存開發者網站後臺 進行相應的域名繫結操作,域名繫結成功後,若您將 bucket 設為公用(public)屬性,則可以用如下方式對上傳的檔案進行訪問:

http://<繫結域名>/<key>

key 即是 sync_dir 裡邊檔名或檔案的相對路徑,key 可以包含斜槓但不能以斜槓開頭。比如sync_dir 存在檔案 a.txt 和 a/b/c.txt,且繫結的域名為 foo.qiniudn.com,那麼即可用如下路徑訪問:

http://foo.qiniudn.com/a.txt
http://foo.qiniudn.com/a/b/c.txt

在建立完 conf.json 配置檔案後,就可以執行 qrsync 程式進行同步。

Unix/Linux/MacOS 系統可以用如下命令列:

$ qrsync /path/to/your-conf.json

以上命令會將 sync_dir 目錄中所有的檔案包括軟連結全部同步到 conf.json 配置檔案指定的 bucket 中。也可以通過加上 -skipsym 選項來忽略軟連結。

$ qrsync -skipsym /path/to/your-conf.json

Windows 系統使用者在 [開始] 選單欄選擇 [執行] 輸入 cmd 回車即可開啟 DOS 命令列視窗,然後切換到 qrsync.exe 的所在磁碟路徑。假設你的 qrsync.exe 存放在 d:/tools/qrsync.exe,那麼如下幾行命令可以切換到 qrsync.exe 存放的目錄:

> d:
> cd tools

進入到 qrsync.exe 所在目錄後執行如下命令即可:

> qrsync.exe /path/to/your-conf.json

需要注意的是,qrsync 是增量同步的,如果你上一次同步成功後修改了部分檔案,那麼再次執行 qrsync 時只同步新增的和被修改的檔案。當然,如果上一次同步過程出錯了,也可以重新執行 qrsync 程式繼續同步。

==============================================================================

CentOS下自動備份網站和資料庫的指令碼

接觸CentOS已經有幾個月的時間了,使用了太久的windows在剛接觸linux命令列介面的時候還真有點不太適應,但到最後也就應了大家的那句話,跟linux接觸的時候越長,就越為她的簡潔高效而折服,我手上有一臺伺服器安裝的作業系統是CentOS5.4,上面部署的有網站和資料庫應用,基本構架:centos+nginx+mysql+php,但由於網站資料比較多,自己手動備份的話太費時間,所以就打算做一個自動執行的指令碼,幫助我在每週的指定時間備份網站內容和資料庫內容,用tar打包,然後再傳到我另外一個ftp伺服器上,整個備份過程就完成了。

  假定這臺伺服器的網站目錄為:/home/www,資料庫程式路徑為:/usr/local/mysql/bin,資料庫名為:levil,ftp伺服器為:ftphost,下面先來看完整的自動備份指令碼(自動備份指令碼儲存位置為:/home/backup.sh):

  #!/bin/bash

  cd /home

  WebBakName=web_$(date +%y%m%d).tar.gz

  tar zcvf $WebBakName www

  SqlBakName=sql_$(date +%y%m%d).tar.gz

  /usr/local/mysql/bin/mysqldump -uusername -ppassword levil>backup.sql

  tar zcvf $SqlBakName backup.sql

  ftp -nv ftphost << EOF

  user ftpname ftppass

  put $WebBakName

  put $SqlBakName

  quit

  EOF

  rm -f backup.sql $WebBakName $SqlBakName

  下面來給大家一一講解:首先進入/home目錄,定義WebBakName變數為網站備份的檔名,檔名格式為web_日期.tar.gz,定義SqlBakName變數為資料庫備份的檔名,檔名格式為sql_日期.tar.gz,把整個網站目錄www打包到WebBakName檔名中,使用mysqldump匯出指定資料庫內容到backup.sql,然後把資料庫備份打包到SqlBakName檔案中,本機備份工作至此結束,如果你沒有足夠大的遠端ftp空間的話,可以直接把備份檔案下載到本機,但我還是建議直接備份到另外一個伺服器上的ftp空間中,做到完全自動化備份,這時你需要把指令碼中的ftphost、ftpname和ftppass分別替換成你的ftp資訊,整個備份過程就完成了。

  接著輸入chmod +x backup.sh給指令碼新增執行許可權,再輸入:crontab -e編輯任務自動開始時間,比如我輸入:

  00 05 * * 1 /home/backup.sh 就代表每週1的上午5點整執行該自動備份操作。

  在這一切完成之後,你可以先把自動任務時間改為當前的接近時間,看自動備份指令碼是否工作正常,測試OK的話以後就不用擔心這臺伺服器出現任何問題導致資料丟失了,當然如果你的資料更新比較頻繁的話,建議把自動備份時間調整為每日。


思路:

用crontab定時備份檔案和資料庫。在之後的時間,比如二十分鐘之後,用crontab執行七牛qrsync上傳檔案。

具體還未測試。

留文記念。