個人博客(vps)的備份

  上週vps被牆的問題,讓我覺得vps主機還是不太安全,萬一掛了所有的資料就都沒有了(雖然也沒啥)。於是就想備份一下,搗鼓了半天后,備份成功。其實也不難,只是以前沒有想去做備份。

  備份包括本地備份和異地備份,本地備份即將數據庫、博客文件及配置文件打包備份到本地;異地備份爲把本地備份上傳到第三方存儲或網站上(例如DropBox,免費空間有2G,足夠個人博客備份使用了)。

操作步驟如下:

1、配置個人的Dropbox,創建一個app
下載dropbox腳本到vps主機上:

# curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh
# chmod +x dropbox_uploader.sh
# ./dropbox_uploader.sh

提示如下:
This is the first time you run this script, please follow the instructions:

  1. Open the following URL in your Browser, and log in using your account: https://www.dropbox.com/developers/apps

  2. Click on "Create App", then select "Dropbox API app"

  3. Now go on with the configuration, choosing the app permissions and access restrictions to your DropBox folder

  4. Enter the "App Name" that you prefer (e.g. MyUploader313092247529194)

Now, click on the "Create App" button.

When your new App is successfully created, please click on the Generate button
under the 'Generated access token' section, then copy and paste the new access token here:

# Access token: 輸入上一步Generated access token生成的訪問令牌

> The access token is -xxxxxxxxxAAAAAAAAAAEGkDdDY4WDkrK7kzzzzzpoFXyyyyyyyyy. Looks ok? [y/N]: y
The configuration has been saved.
配置完成。
創建APP

wKiom1nMdLOCewYTAAD1Pcuuyxo353.jpg

生成訪問令牌

wKioL1nMdJOglsmpAAEOHWM3EDs310.jpg


2、創建備份腳本
先創建好備份文件夾/data/backup,拷貝backup.sh、dropbox_uploader.sh到/usr/local/sbin/目錄。
腳本如下:(計劃每週備份一次,刪除半個月以前的本地備份,一個月以前的網絡備份)

#!/bin/bash
Today=`date +%Y%m%d`
Bakdir=/data/backup
Baklog=$Bakdir/backup_${Today}.log
Expire=`date -d -1month +%Y%m%d`
sqlpasswd="mysql_passwd"
Dropbox=/${Today}
Webdir=/usr/share/nginx/html
exec 1>>$Baklog
exec 2>>$Baklog
#Create Today BackupDirectory
if [ ! -d $Bakdir/$Today ]
  then
    mkdir $Bakdir/$Today
fi
#Backup Mysql DB
echo "###########################################"
echo "Backup Mysql DB:"
echo "Start Time:`date +"%F %H:%M:%S"`"
/usr/bin/mysqldump -uroot -p$sqlpasswd typecho>${Today}_typecho_bak.sql
tar zcpf ${Today}_typecho_bak.tar.gz ${Today}_typecho_bak.sql
rm -f ${Today}_typecho_bak.sql
mv ${Today}_typecho_bak.tar.gz $Bakdir/$Today/
echo "Stop Time:`date +"%F %H:%M:%S"`"
#Backup Website Data
echo "###########################################"
echo "Backup Website Data:"
echo "Start Time:`date +"%F %H:%M:%S"`"
tar zcpPf ${Today}_web_bak.tar.gz /usr/share/nginx/html
mv ${Today}_web_bak.tar.gz $Bakdir/$Today/
echo "Stop Time:`date +"%F %H:%M:%S"`"
#Upload Dropbox
echo "###########################################"
echo "Upload Backup:"
echo "Start Time:`date +"%F %H:%M:%S"`"
/usr/local/sbin/dropbox_uploader.sh upload$Bakdir/$Today/${Today}_typecho_bak.tar.gz ${Dropbox}/${Today}_typecho_bak.tar.gz
/usr/local/sbin/dropbox_uploader.sh upload$Bakdir/$Today/${Today}_web_bak.tar.gz ${Dropbox}/${Today}_web_bak.tar.gz
echo "Stop Time:`date +"%F %H:%M:%S"`"
#Delete old data
echo "###########################################"
echo "Delete expire data:"
echo "Start Time:`date +"%F %H:%M:%S"`"
find ${Bakdir} -mtime +14 |xargs rm -rf
/usr/local/sbin/dropbox_uploader.sh delete /$Expire
echo "Stop Time:`date +"%F %H:%M:%S"`"

3、備份配置文件
在web站點下新建配置文件備份目錄(便於統一打包),拷貝以下配置文件到此目錄
例如:
/etc/php.ini
/etc/php-fpm.d/www.conf
/etc/nginx/nginx.conf
/etc/nginx/fastcgi_params
/etc/nginx/conf.d/default.conf
等配置文件。

4、配置計劃任務(每週五的晚上11點備份)
備份文件32M,上傳到Dropbox只需要15秒左右。
0 23 * * 5 root /usr/bin/sh /usr/local/sbin/backup.sh > /dev/null 2>&1


手動執行腳本,輸出日誌如下:

# cat /data/backup/backup_20170927.log 

###########################################

Backup Mysql DB:

Start Time:2017-09-27 16:10:50

Stop Time:2017-09-27 16:10:50

###########################################

Backup Website Data:

Start Time:2017-09-27 16:10:50

Stop Time:2017-09-27 16:10:52

###########################################

Upload Backup:

Start Time:2017-09-27 16:10:52

 > Uploading "/data/backup/20170927/20170927_typecho_bak.tar.gz" to "/20170927/20170927_typecho_bak.tar.gz"... DONE

 > Uploading "/data/backup/20170927/20170927_web_bak.tar.gz" to "/20170927/20170927_web_bak.tar.gz"... DONE

Stop Time:2017-09-27 16:11:03

###########################################

Delete expire data:

Start Time:2017-09-27 16:11:03

 > Deleting "/20170827"... FAILED

Stop Time:2017-09-27 16:11:04


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章