利用騰訊雲COS雲對象存儲定時遠程備份網站

版權聲明:本文由張戈  原創文章,轉載請註明出處: 
文章原文連接:https://www.qcloud.com/community/article/942851001487125915html

來源:騰雲閣 https://www.qcloud.com/communitypython

 

1、優勢分析

內網傳輸:和阿里雲OSS同樣,騰訊雲COS一樣支持內網和外網文件傳輸,對於騰訊雲服務器,使用內網傳輸絕對是最快、最穩定的備份方案!mysql

免費方案:看了下騰訊雲COS的訂價說明,發現對於備份網站來講簡直是絕佳搭檔,甚至能夠說是鑽了個空子(但願騰訊雲的同事看到別打我。。。)!爲啥這麼說?git

看下訂價方案:github

①、入流量免費

至關於咱們上傳文件的流量都是免費的,不區份內外網哦!內網就不說了,都懂。
web

②、各類免費額度

以七天循環備份(7份壓縮包)以來算,單壓縮包支持700M+(700M*7≈50G),應付通常網站的備份絕對是足夠足夠足夠了!
sql

2、準備工做

①、開通COS,並建立Bucket

訪問騰訊雲COS開通對象存儲服務,而後如圖建立Bucket:
數據庫

Ps:咱們只用於備份,且爲私密資料,因此選擇私有讀寫。安全

②、添加密鑰

接着,咱們點擊左側的密鑰管理,進入密鑰界面如圖建立密鑰,若是先前已經有密鑰了,則能夠直接使用:
bash

3、備份腳本

人生苦短,我用Python,這裏就繼續選擇Python SDK來實現,

①、環境準備

以下順序安裝騰訊雲Python SDK插件

#安裝pip
yum install python-pip

#升級pip(yum裝的可能版本比較舊)
pip install --upgrade pip

#安裝騰訊雲COS SDK插件
pip install qcloud_cos

若是不是Centos,請自行搞定,這裏再也不贅述。

②、上傳腳本

參考官方SDK文檔,寫了一個簡單夠用的上傳腳本:

# -*- coding: utf-8 -*-
# Upload File To Qcloud COS

from qcloud_cos import CosClient
from qcloud_cos import UploadFileRequest
import sys

#腳本須要傳入6個參數
if ( len(sys.argv) > 5 ):
    appid      = int(sys.argv[1])
    secret_id  = sys.argv[2].decode('utf-8')
    secret_key = sys.argv[3].decode('utf-8')
    bucket     = sys.argv[4].decode('utf-8')
    domain     = sys.argv[5].decode('utf-8')
    filePath = sys.argv[6].decode('utf-8')
    fileName = filePath.split("/")[-1]
else:
    print("Example: python %s appid secret_id secret_key Bucket zhangge.net /data/backup.zip" % sys.argv[0])
    exit()

#認證和上傳
cos_client = CosClient(appid, secret_id, secret_key)
request = UploadFileRequest(bucket, '/%s/%s' % ( domain, fileName ), filePath)
request.set_insert_only(0) 
upload_file_ret = cos_client.upload_file(request)
print 'The File %s Upload to Bucket %s : %s ' % ( filePath , bucket , upload_file_ret.get('message') )

使用方法:將上述代碼保存爲 cos.upload.py,並上傳到服務器,執行以下命令可開始上傳文件到OSS:

python /data/oss.upload.py appid secret_id secret_key Bucket名稱 域名 /data/zhangge.net_1.zip

其中:

  • 1~3個參數是appid、認證ID和認證密鑰,也就是前文建立並備忘的密鑰信息;
  • 第4個參數是前文建立的Bucket名稱,好比mybackup
  • 第5個參數是須要備份的域名(新增的:主要是爲了區分下)
  • 第6個參數是要上傳的本地文件的絕對路徑

執行後,就能在COS的Object界面看到了上傳的文件:

4、定時備份

有了上傳腳本,繼續結合以前張戈博客分享的七天循環備份腳本,實現循環備份到COS了,既安全還節省COS空間。

①、適合COS七天循環備份腳本

#!/bin/sh
###################################################################
#  Web Backup version 1.0.0 Author: Jager <ge@zhangge.net>        #
# For more information please visit https://zhangge.net/5117.html #
#-----------------------------------------------------------------#
#  Copyright ©2016 zhangge.net. All rights reserved.              #
###################################################################

isDel=n
args=$#
isDel=${!args}
mypassword=123456
test -f /etc/profile && . /etc/profile >/dev/null 2>&1
baseDir=$(cd $(dirname $0) && pwd)
zip --version >/dev/null || yum install -y zip
ZIP=$(which zip)
TODAY=`date +%u`
PYTHON=$(which python)
MYSQLDUMP=$(which mysqldump)

# 新增的COS上傳文件函數,請按照實際狀況修改appID,認證KEY、認證密鑰和Bucket名稱!!!
uploadToCOS()
{
    $PYTHON $baseDir/cos.upload.py appID 認證KEY 認證密鑰 Bucket名稱 $1 $2
    if [[ $? -eq 0 ]] &&  [[ "$isDel" == "y" ]]
    then
        test -f $2 && rm -f $2
    fi
}

printHelp()
{
clear
printf '
=====================================Help infomation=========================================
1. Use For Backup database:
The $1 must be [db]
    $2: [domain]
    $3: [dbname]
    $4: [mysqluser]
    $5: [mysqlpassword]
    $6: [back_path]
    $7: [isDel]

For example:./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/zhangge.net

2. Use For Backup webfile:
The $1 must be [\file]:
    $2: [domain]
    $3: [site_path]
    $4: [back_path]
    $5: [isDel]

For example:./backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net
=====================================End of Hlep==============================================

'
exit 0
}

backupDB()
{
    domain=$1
    dbname=$2
    mysqluser=$3
    mysqlpd=$4
    back_path=$5
    test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
    cd $back_path
    #若是是要備份遠程MySQL,則修改以下語句中localhost爲遠程MySQL地址
    $MYSQLDUMP -hlocahost -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables --default-character-set=utf8 >$back_path/$domain\_db_$TODAY\.sql
    test -f $back_path/$domain\_db_$TODAY\.sql || (echo "MysqlDump failed! Please CheckOut Or feedback to zhangge.net..." && exit 2)
    $ZIP -P$mypassword -m $back_path/$domain\_db_$TODAY\.zip $domain\_db_$TODAY\.sql && \
    uploadToCOS $domain $back_path/$domain\_db_$TODAY\.zip
}

backupFile()
{
    domain=$1
    site_path=$2
    back_path=$3
    test -d $site_path || (echo "$site_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
    test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
    test -f $back_path/$domain\_$TODAY\.zip && rm -f $back_path/$domain\_$TODAY\.zip
    $ZIP -P$mypassword -9r $back_path/$domain\_$TODAY\.zip $site_path && \
    uploadToCOS $domain $back_path/$domain\_$TODAY\.zip    
}

while [ $1 ]; do
    case $1 in
        '--db' | 'db' )
        backupDB $2 $3 $4 $5 $6
        exit
        ;;
        '--file' | 'file' )
        backupFile $2 $3 $4
        exit  
        ;;
        * )
        printHelp
        exit
        ;;
    esac
done
printHelp

②、使用方法

將上述代碼做以下修改:

I、根據實際狀況修改上述代碼中的COS上傳函數代碼,好比密鑰對和Bucket名稱(參考前文)
II、替換代碼中的mypassword=123456爲本身設置的壓縮包密碼,不修改的話壓縮文件解壓密碼爲123456

而後,將代碼保存爲backup.sh,上傳到服務器(建議存放到和前文python腳本的相同目錄),好比/data/backup.sh,最後以下添加定時任務:

#編輯crontab
[root@AlyServer ~]# crontab -e

#而後添加以下內容:

#備份數據庫(參數依次爲:db、域名、數據庫名稱、數據庫用戶名、對應密碼、備份路徑 [可選:y 刪除本地壓縮包])
10 3 * * * bash /data/backup.sh db zhangge.net zhangge root 123456 /home/wwwbackup/zhangge.net > /dev/null 2>&1

#備份網站文件(參數依次爲:file、域名、網站根目錄、備份路徑 [可選:y 刪除本地壓縮包])
15 3 * * * bash /data/backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net >/dev/null 2>&1

#按下鍵盤esc,輸入 :wq 保存crontab便可

所有完成後,就能實現本地7天循環備份和COS遠程備份了!

在文章的最後,爲了方便廣大代碼小白朋友,特提供本文涉及腳本的打包下載:

5、幕後花絮

在折騰SDK的時候,第一眼其實被騰訊雲的說明文檔虐到了:

只說瞭如何安裝SDK插件,而後直接來個def函數,而後就沒而後了,到底如何import這個SDK?一臉懵逼。。。
最後在github的 simple.py 中才找到了完整的DEMO:
https://github.com/tencentyun/cos-python-sdk/blob/3.3/sample.py

在這懵逼期間,我甚至用上了騰訊雲作好的本地遷移工具,實際也是很是好用,簡單配置下就能在後臺定時上傳更新的文件到COS了:

篇幅有限,這裏就不深刻介紹了,除此以外,COS還提供了其餘很是實用的工具,好比FTP工具、七牛以及OSS遷移工具等,感興趣的朋友只須要看下 官方文檔 就會弄了!

相關文章
相關標籤/搜索