利用腾讯云COS云对象存储定时远程备份网站 | 张戈博客

  • 时间:
  • 浏览:107
  • 来源:爱Q时尚网_提供123导航技术_冰封娱乐网资讯

导读:一另十几个 月前,张戈博客分享了一篇Python+Shell定时备份网站到阿里云OSS的教程,可能性有非常多的站长亲们用上了,反馈还不错,否是不少亲们提出了好多好多 优化建议,比如上传完成能不也能删除本地压缩包类事的,本文将继续分享另某种 云端备份方案。

一、优点分析

内网传输:和阿里云OSS一样,腾讯云COS同样支持内网和外网文件传输,对于腾讯云服务器,使用内网传输绝对是最快、最稳定的备份方案!

免费方案:想看 下腾讯云COS的定价说明,发现对于备份网站来说确实 是绝佳搭档,甚至能也能说是钻了个空子(希望腾讯云的同事想看 别打我。。。)!咋样会这麼说?

看下定价方案:

①、入流量免费

合适亲们上传文件的流量否是免费的,不区分内外网哦!内网就不说了,都懂。

②、各种免费额度

以七天循环备份(7份压缩包)以来算,单压缩包支持700M+(700M*7≈3000G),应付一般网站的备份绝对是足够足够足够了!

从上述摘选的定价方案来看,腾讯云COS比阿里云OSS更适合做网站备份,关键他还适合在第三方服务器上做远程备份,可能性不但入流量(上传)免费,出流量(下载)也免费10GB。

二、准备工作

①、开通COS,并创建Bucket

访问腾讯云COS开通对象存储服务,而且如图创建Bucket:

Ps:亲们只用于备份,且为私密资料,好多好多 选用私有读写。

②、再加密钥

接着,亲们点击左侧的密钥管理,进入密钥界面如图创建密钥,可能性先前可能性有密钥了,则能也能直接使用:

Ps:这里亲们也能记住5个信息:AppID,SecretID和SecretKey,待会要用。

三、备份工具

2019年6月22日更新:最近使用COS的完后 ,发现确实COS提供了一一另十几个 更简单的上传下载工具:coscmd,好多好多 上传下载这每项淘汰完后 我许多人写的Python脚本,改为coscmd,工具完全使用帮助请看官方文档。

①、环境准备

Linux下执行如下3条命令即可安装 coscmd

yum install python-pip
pip install --upgrade pip
pip install coscmd

Ps:可能性安装失败,请参考官方文档提供的许多安装途径。

②、工具配置

配置 ~/.cos.conf 文件 (在 Windows 环境下,该文件是发生 我的文档 下的一一另十几个 隐藏文件),该文件初始时不发生,是通过 coscmd config 命令生成,用户也能也能手动创建。

Linux下直接执行如下命令即可(请先根据实际状态修改 secret_id、secret_key、bucket和region):

cat >~/.cos1.conf<<EOF
[common]
secret_id = AChT4ThiXAbpBDEFGhT4ThiXAbp****
secret_key = WE54wreefvds3462refgwewe****
bucket = 请根据实际状态修改
region = 请根据实际状态修改,比如广州区域是 ap-guangzhou
max_thread = 5
part_size = 1
schema = https
EOF

③、上传测试

工具配置好了完后 ,亲们手工执行上传看看验证下结果,Linux执行如下命令行即可:

echo `date` > /tmp/test_upload.txt
coscmd upload /tmp/test_upload.txt test_upload.txt

执行后正常输出如下:

[email protected]:/# echo `date` > /tmp/test_upload.txt
[email protected]:/# coscmd upload /tmp/test_upload.txt test_upload.txt
Upload /tmp/test_upload.txt   =>   cos://jager/test_upload.txt

可能性这麼报错,亲们登陆腾讯云COS就能也能想看 完后 上传的文件了:

三、备份脚本(已淘汰)

人生苦短,我用Python,这里就继续选用Python SDK来实现,

①、环境准备

如下顺序安装腾讯云Python SDK插件:

#安装pip
yum install python-pip

#升级pip(yum装的可能性版本比较旧)
pip install --upgrade pip

#安装腾讯云COS SDK插件
pip install qcloud_cos_v4

可能性否是Centos,请自行学会英语,这里不再赘述。

②、上传脚本

参考官方SDK文档,写了一一另十几个 简单够用的上传脚本:

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

from qcloud_cos import CosClient
from qcloud_cos import UploadFileRequest
import sys

region = "shanghai" #替换为COS所在区域,可选shanghai(华东)/guangzhou(华南)/tianjin(华北)/chengdu(西南)
#脚本也能传入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 zhang.ge /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/zhang.ge_1.zip

其中:

  • 1~5个参数是appid、认证ID和认证密钥,也已经 前文创建并备忘的密钥信息;
  • 第一另十几个 参数是前文创建的Bucket名称,比如mybackup
  • 第5个参数是也能备份的域名(新增的:主已经 为了区分下)
  • 第6个参数是要上传的本地文件的绝对路径
  • 不咋样会说明:更新到V4版本后,才发现还也能传入一一另十几个 地域的参数,这里就不再修改脚本代码了,请直接修改上述代码的region 的值,而且会报404错误!目前可选有shanghai(华东)/guangzhou(华南)/tianjin(华北)/chengdu(西南),具体请看许多人的COS所在地域以及腾讯云关于地域的文档。

执行后,就能在COS的Object界面想看 了上传的文件:

四、定时备份

有了上传脚本,继续结合完后 张戈博客分享的七天循环备份脚本,实现循环备份到COS了,既安全还节省COS空间。

①、适合COS七天循环备份脚本

#!/bin/sh
###################################################################
#  Web Backup version 1.0.0 Author: Jager <[email protected]>        #
# For more information please visit https://zhang.ge/5117.html #
#-----------------------------------------------------------------#
#  Copyright ©2016 zhang.ge. 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)

# coscmd工具上传函数
uploadToCOS()
 {
     file=$2
     domain=$1
     file_name=$(basename $2)
     coscmd upload $file $domain/$file_name
     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 zhang.ge zhangge_db zhangge 123456 /home/wwwbackup/zhang.ge

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 zhang.ge /home/wwwroot/zhang.ge /home/wwwbackup/zhang.ge
=====================================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 zhang.ge..." && exit 2)
    cd $back_path
    #可能性是要备份远程MySQL,则修改如下语录中localhost为远程MySQL地址
    $MYSQLDUMP -hlocalhost -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 zhang.ge..." && 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 zhang.ge..." && exit 2)
    test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhang.ge..." && 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,上传到服务器,比如 /data/backup.sh,最后如下再加定时任务:

#编辑crontab
[[email protected]AlyServer ~]# crontab -e
#而且再加如下内容:

#备份数据库(参数依次为:db、域名、数据库名称、数据库用户名、对应密码、备份路径 [可选:y 删除本地压缩包])
10 3 * * * bash /data/backup.sh db zhang.ge zhangge root 123456 /home/wwwbackup/zhang.ge > /dev/null 2>&1
#备份网站文件(参数依次为:file、域名、网站根目录、备份路径 [可选:y 删除本地压缩包])
15 3 * * * bash /data/backup.sh file zhang.ge /home/wwwroot/zhang.ge /home/wwwbackup/zhang.ge >/dev/null 2>&1

#按下键盘esc,输入 :wq 保存crontab即可

本文就不赘述四天循环备份脚本的功能和更完全的使用最好的妙招了,若还是不清楚请参考前文:Linux/vps本地七天循环备份和七牛远程备份脚本

完全完成后,就能实现本地四天循环备份和COS远程备份了!可能性,完后 可能性做了七牛远程备份的能也能放心取消了。

完后 有亲们留言说能也能自动删除已上传的文件呢?这次修改简单的加入了一一另十几个 否是删除的功能:只也能在脚本执行的最后追加一一另十几个 y 参数,成功上传到COS后就会自动删除本次备份的压缩包了(看不懂的慎用)。

在文章的最后,为了方便广大代码小白亲们,特提供本文涉及脚本的打包下载:

五、幕后花絮

在折腾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迁移工具等,感兴趣的亲们只也能看下 官方文档 就会弄了!

好了,折腾吧,骚年!好用语录,有钱的能也能打赏,没钱的欢迎点赞,不怕一万多,不嫌一块少。。。