天天看點

個人VPS資料備份之異地備份.我有DropBox

現在個人部落格越來、個人網站越來越多,身邊大部分人都扮演着小小站長的角色,每個人手下都有着不同配置的VPS,作為一個Linux運維人員,擁有一個VPS的小小站長,細心經營搗鼓着自己的伺服器/VPS,努力而細心的“經營”着自己的這份工作與愛好。本着事事無常的态度,不可再生的資料顯的尤為重要,“備份”這個名詞,總會讓人的内心得到一絲安全感。

備份是門大學問,根據備份方式可分邏輯備份和實體備份。

根據備份時刻可分冷備份和熱備份

根據存儲媒體可分本地備份和異地備份,而異地備份具有容災性

對于個人VPS的資料備份,如果隻将網頁資料和資料庫資料打包儲存在本機的一個目錄下,并不能完全達到資料備份的意義。而異地備份在于備份的資料會被存放在至少3個實體節點上,已達到異地容災性備份,而鑒于成本考慮,不可能在買一個VPS進行異地容災備份。但這并不代表對于VPS使用者做到異地備份就沒有其他備份方案了。

Dropbox,一個提供同步本地檔案的網絡存儲線上應用,它提供了豐富的API,我們可以通過API将自己VPS備份的資料立刻同步到DropBox中,而DropBox提供的免費空間最夠大部分站長的備份空間需求。我們利用DropBox這樣的第三方腳本,來實作同步與删除。

1.下載下傳DropBox腳本,到自己的VPS上

1

2

3

<code># wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh</code>

<code># chmod +x dropbox_uploader.sh</code>

<code># ./dropbox_uploader.sh</code>

運作該腳本,根據以下提示進行DropBox的設定

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>This </code><code>is</code> <code>the first time you run </code><code>this</code> <code>script.</code>

<code>1</code><code>) Open the following URL </code><code>in</code> <code>your Browser, and log </code><code>in</code> <code>using your account: https:</code><code>//www2.dropbox.com/developers/apps</code>

<code>在浏覽器中打開,https:</code><code>//www2.dropbox.com/developers/apps</code>

<code>2</code><code>) Click on </code><code>"Create App"</code><code>, then select </code><code>"Dropbox API app"</code>

<code>點選</code><code>"Create App"</code><code>按鈕,然後選擇</code><code>"Dropbox API app"</code>

<code>3</code><code>) Select </code><code>"Files and datastores"</code>

<code>選擇</code><code>"Files and datastores"</code><code>選項</code>

<code>4</code><code>) Now go on </code><code>with</code> <code>the configuration, choosing the app permissions and access restrictions to your DropBox folder</code>

<code>現在去進行配置,選擇這個app對你整個Dropbox檔案夾的通路權限</code>

<code>5</code><code>) Enter the </code><code>"App Name"</code> <code>that you prefer (e.g. MyUploader113012919723169)</code>

<code>輸入一個你喜歡的App名稱</code>

<code>Now, click on the </code><code>"Create app"</code> <code>button.</code>

<code>When your </code><code>new</code> <code>App </code><code>is</code> <code>successfully created, please type the</code>

<code>App Key, App Secret and the Permission type shown </code><code>in</code> <code>the confirmation page:</code>

<code># App key: xxxxxxxxxx</code>

<code># App secret: xxxxxxxxx</code>

<code># Permission type, App folder or Full Dropbox [a/f]: a</code>

<code>&gt; App key </code><code>is</code> <code>xxxxxxxxxx, App secret </code><code>is</code> <code>xxxxxxxxxx and Access level </code><code>is</code> <code>App Folder, it's ok? [y/n]y</code>

<code>&gt; Token request... OK</code>

<code>Please open the following URL </code><code>in</code> <code>your Browser, and allow Dropbox Uploader</code>

<code>to access your DropBox folder:</code>

<code>--&gt; https:</code><code>//www2.dropbox.com/1/oauth/authorize?oauth_token=iP0TqrmjjKcAUfwW</code>

<code>Press enter when done...</code>

<code>&gt; Access Token request... OK</code>

<code>Setup completed!</code>

<a href="http://blog.coocla.org/wp-content/uploads/2013/10/1.png" target="_blank"></a>

<a href="http://blog.coocla.org/wp-content/uploads/2013/10/2.png" target="_blank"></a>

<a href="http://blog.coocla.org/wp-content/uploads/2013/10/3.png" target="_blank"></a>

到此為止,關于Dropbox的設定就結束了,接下來按照自己的情況編寫備份同步腳本。

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

<code>#!/bin/bash</code>

<code>#</code>

<code># when:</code><code>2013</code><code>/</code><code>10</code><code>/</code><code>15</code>

<code># who:http:</code><code>//blog.coocla.org</code>

<code>TODAY=`date -I`                                         # 擷取目前日期</code>

<code>BACKUP_LOG=/data/backup/backup_${TODAY}.log             # 備份日志</code>

<code>Expire=`date -d -7day +</code><code>"%Y-%m-%d"</code><code>`                      # 擷取</code><code>7</code><code>天前的日期</code>

<code>MYSQL_USER=</code><code>"root"</code>                                       <code># Mysql使用者</code>

<code>MYSQL_PASS=</code><code>"rootpass"</code>                                   <code># Mysql密碼</code>

<code>MYSQL_DB=(</code><code>'blog'</code> <code>'yunxiaojia'</code><code>)                          # 要備份的資料庫名</code>

<code>BACK_DIR=/data/backup                                   # 備份存放的目錄</code>

<code>Dropbox=/${TODAY}                                       # Dropbox上建立的app存放目錄,這裡的根(/)是指app的根目錄</code>

<code>WEB_DATA=/data/www/wwwroot                              # 網頁檔案目錄</code>

<code>#Create Today BackupDirectory</code>

<code>if</code> <code>[ ! -d $BACK_DIR/$TODAY ];then</code>

<code>    </code><code>mkdir $BACK_DIR/$TODAY</code>

<code>fi</code>

<code>#Backup Mysql DB</code>

<code>echo </code><code>"###############################################################"</code> <code>&gt; $BACKUP_LOG</code>

<code>echo </code><code>"Backup Mysql DB."</code> <code>&gt;&gt; $BACKUP_LOG</code>

<code>echo </code><code>"Start Time : `date +%F"</code> <code>"%H:%M:%S`"</code> <code>&gt;&gt; $BACKUP_LOG</code>

<code>for</code> <code>db </code><code>in</code> <code>${MYSQL_DB[@]};</code><code>do</code>

<code>    </code><code>/usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS --skip-opt --add-drop-table --create-options -q -e --</code><code>set</code><code>-charset --routines --single-transaction --master-data=</code><code>2</code> <code>$db &gt; ${TODAY}_${db}_full_back.sql --log-error=$BACKUP_LOG</code>

<code>done</code>

<code>tar zcf ${TODAY}_db_full_back.tar.gz *.sql</code>

<code>rm -f *.sql</code>

<code>mv ${TODAY}_db_full_back.tar.gz ${BACK_DIR}/${TODAY}/</code>

<code>echo </code><code>"Stop Time : `date +%F"</code> <code>"%H:%M:%S`"</code> <code>&gt;&gt; $BACKUP_LOG</code>

<code>#Backup Website Data</code>

<code>echo </code><code>"###############################################################"</code> <code>&gt;&gt; $BACKUP_LOG</code>

<code>echo </code><code>"Backup Website Data."</code> <code>&gt;&gt; $BACKUP_LOG</code>

<code>cd $WEB_DATA</code>

<code>tar zcf ${TODAY}_web_full_back.tar.gz ./* &amp;&amp; cd -</code>

<code>mv ${WEB_DATA}/${TODAY}_web_full_back.tar.gz ${BACK_DIR}/${TODAY}/</code>

<code>#Upload Dropbox</code>

<code>echo </code><code>"Upload backup."</code> <code>&gt;&gt; $BACKUP_LOG</code>

<code>/usr/local/sbin/dropbox_uploader.sh upload ${BACK_DIR}/${TODAY}/${TODAY}_db_full_back.tar.gz ${Dropbox}/${TODAY}_db_full_back.tar.gz &gt;&gt; $BACKUP_LOG</code>

<code>/usr/local/sbin/dropbox_uploader.sh upload ${BACK_DIR}/${TODAY}/${TODAY}_web_full_back.tar.gz ${Dropbox}/${TODAY}_web_full_back.tar.gz &gt;&gt; $BACKUP_LOG</code>

<code>#Delete old data</code>

<code>echo </code><code>"Delete expire data."</code> <code>&gt;&gt; $BACKUP_LOG</code>

<code>find ${BACK_DIR} -mtime +</code><code>3</code> <code>| xargs rm -rf</code>

<code>/usr/local/sbin/dropbox_uploader.sh </code><code>delete</code> <code>/$Expire/ &gt;&gt; $BACKUP_LOG</code>

檢視日志資訊如下:

<code>###############################################################</code>

<code>Backup Mysql DB.</code>

<code>Start Time : </code><code>2013</code><code>-</code><code>10</code><code>-</code><code>15</code> <code>22</code><code>:</code><code>12</code><code>:</code><code>11</code>

<code>Stop Time : </code><code>2013</code><code>-</code><code>10</code><code>-</code><code>15</code> <code>22</code><code>:</code><code>12</code><code>:</code><code>21</code>

<code>Backup Website Data.</code>

<code>Start Time : </code><code>2013</code><code>-</code><code>10</code><code>-</code><code>15</code> <code>22</code><code>:</code><code>12</code><code>:</code><code>21</code>

<code>Stop Time : </code><code>2013</code><code>-</code><code>10</code><code>-</code><code>15</code> <code>22</code><code>:</code><code>12</code><code>:</code><code>27</code>

<code>Upload backup.</code>

<code>Start Time : </code><code>2013</code><code>-</code><code>10</code><code>-</code><code>15</code> <code>22</code><code>:</code><code>12</code><code>:</code><code>27</code>

<code> </code><code>&gt; Uploading </code><code>"/data/backup/2013-10-15/2013-10-15_db_full_back.tar.gz"</code> <code>to </code><code>"/2013-10-15/2013-10-15_db_full_back.tar.gz"</code><code>... DONE</code>

<code> </code><code>&gt; Uploading </code><code>"/data/backup/2013-10-15/2013-10-15_web_full_back.tar.gz"</code> <code>to </code><code>"/2013-10-15/2013-10-15_web_full_back.tar.gz"</code><code>... DONE</code>

<code>Stop Time : </code><code>2013</code><code>-</code><code>10</code><code>-</code><code>15</code> <code>22</code><code>:</code><code>12</code><code>:</code><code>42</code>

<code>Delete expire data.</code>

<code>Start Time : </code><code>2013</code><code>-</code><code>10</code><code>-</code><code>15</code> <code>22</code><code>:</code><code>12</code><code>:</code><code>42</code>

<code> </code><code>&gt; Deleting </code><code>"/2013-10-08"</code><code>... FAILED</code>

然後将該腳本和dropbox_uploader.sh腳本放置于/usr/local/sbin或同一目錄下,然後定義crontab計劃任務:

根據日志中開始時間和結束時間,小夥伴們可以定義crontab開始的時間,由于我的内容比較少,在1分鐘隻能即可完成,我的crontab設定如下:

<code>59</code> <code>23</code> <code>* * * /bin/sh /usr/local/sbin/backup.sh &gt; /dev/</code><code>null</code> <code>2</code><code>&gt;&amp;</code><code>1</code>

小夥伴們也可以下載下傳DropBox用戶端安裝在自己的PC上,然後進行同步,手動運作以上腳本或者等待計劃任務執行後,待自動同步後,即可在windows下檢視的到剛才同步上去的備份檔案啦!

好了,小夥伴們快去建立自己的異地備份政策吧~

本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/1309401,如需轉載請自行聯系原作者

繼續閱讀