現在個人部落格越來、個人網站越來越多,身邊大部分人都扮演着小小站長的角色,每個人手下都有着不同配置的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>> 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>> 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>--> https:</code><code>//www2.dropbox.com/1/oauth/authorize?oauth_token=iP0TqrmjjKcAUfwW</code>
<code>Press enter when done...</code>
<code>> 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>> $BACKUP_LOG</code>
<code>echo </code><code>"Backup Mysql DB."</code> <code>>> $BACKUP_LOG</code>
<code>echo </code><code>"Start Time : `date +%F"</code> <code>"%H:%M:%S`"</code> <code>>> $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 > ${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>>> $BACKUP_LOG</code>
<code>#Backup Website Data</code>
<code>echo </code><code>"###############################################################"</code> <code>>> $BACKUP_LOG</code>
<code>echo </code><code>"Backup Website Data."</code> <code>>> $BACKUP_LOG</code>
<code>cd $WEB_DATA</code>
<code>tar zcf ${TODAY}_web_full_back.tar.gz ./* && 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>>> $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 >> $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 >> $BACKUP_LOG</code>
<code>#Delete old data</code>
<code>echo </code><code>"Delete expire data."</code> <code>>> $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/ >> $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>> 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>> 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>> 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 > /dev/</code><code>null</code> <code>2</code><code>>&</code><code>1</code>
小夥伴們也可以下載下傳DropBox用戶端安裝在自己的PC上,然後進行同步,手動運作以上腳本或者等待計劃任務執行後,待自動同步後,即可在windows下檢視的到剛才同步上去的備份檔案啦!
好了,小夥伴們快去建立自己的異地備份政策吧~
本文轉自 向陽草米奇 51CTO部落格,原文連結:http://blog.51cto.com/grass51/1309401,如需轉載請自行聯系原作者