前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用腾讯云COS云对象存储定时远程备份网站

利用腾讯云COS云对象存储定时远程备份网站

作者头像
张戈
发布于 2018-03-21 06:26:01
发布于 2018-03-21 06:26:01
12.4K10
代码可运行
举报
文章被收录于专栏:张戈的专栏张戈的专栏
运行总次数:0
代码可运行

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

一、优点分析

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

免费方案:看了下腾讯云 COS 的定价说明,发现对于备份网站来说简直是绝佳搭档,甚至可以说是钻了个空子(希望腾讯云的同事看到别打我。。。)!为啥这么说?

看下定价方案:

①、入流量免费

相当于我们上传文件的流量都是免费的,不区分内外网哦!内网就不说了,都懂。

②、各种免费额度

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

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

二、准备工作

①、开通 COS,并创建 Bucket

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

Ps:我们只用于备份,且为私密资料,所以选择私有读写。

②、添加密钥

接着,我们点击左侧的密钥管理,进入密钥界面如图创建密钥,如果先前已经有密钥了,则可以直接使用:

Ps:这里我们需要记住 3 个信息:AppID,SecretID 和 SecretKey,待会要用。

三、备份脚本

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

①、环境准备

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#安装pip
yum install python-pip

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

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

如果不是 Centos,请自行搞定,这里不再赘述。

②、上传脚本

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- 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 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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 个参数是要上传的本地文件的绝对路径
  • 特别说明:更新到 V4 版本后,才发现还需要传入一个地域的参数,这里就不再修改脚本代码了,请直接修改上述代码的 region 的值,否则会报 404 错误!目前可选有 shanghai(华东)/guangzhou(华南)/tianjin(华北)/chengdu(西南),具体请看自己的 COS 所在地域以及腾讯云关于地域的文档

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

四、定时备份

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/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 -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 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,最后如下添加定时任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#编辑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 天循环备份脚本的功能和更详细的使用方法了,若还是不清楚请参考前文:Linux/vps 本地七天循环备份和七牛远程备份脚本

全部完成后,就能实现本地 7 天循环备份和 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 迁移工具等,感兴趣的朋友只需要看下 官方文档 就会弄了!

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年01月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
有适合windows2008 R2的教程吗?
有适合windows2008 R2的教程吗?
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
利用腾讯云COS云对象存储定时远程备份网站
内网传输:和阿里云OSS一样,腾讯云COS同样支持内网和外网文件传输,对于腾讯云服务器,使用内网传输绝对是最快、最稳定的备份方案!
用户8851537
2021/07/21
6.3K0
【玩转腾讯云】妈妈再也不用担心我记不住密码啦!
在我们的生活和工作当中,会用到非常多的网络应用,因为并不是每个应用都能用类似QQ/微信一键登录的方式来绑定账号,所以也就有了非常多的账号密码,记密码成为了让我们非常头疼的事情。太简单或者过于单一的密码容易被撞库或“脱裤”,而太复杂的密码又难以记忆。因此,市面上就有了多款帮助我们记录密码的软件服务,比如1password、Lastpass等。这些软件能够自动抓取我们提交的账号密码保存到云端,实现多终端同步、自动填充密码等功能。虽说这类服务一般还是比较靠谱的,而且还有一些付费套餐。但是密码存在别人的服务器上你总是会有些不放心,谁知道哪天会不会出现数据泄露之类的问题?
张戈
2020/03/29
10K7
【玩转腾讯云】妈妈再也不用担心我记不住密码啦!
Linux系统crontab备份数据库执行不成功?可能是百分号%在作怪!
之前博客分享过一篇《Linux/vps 本地七天循环备份和七牛远程备份脚本》,我自己也一直在用。某天检查备份的时候,突然发现数据库的备份的压缩包是空的! 看了下 crontab 的日志,发现有如下错误: Access denied for user 'dbuser'@'localhost' to database 'db' when using LOCK TABLES 原来,我在计划任务中备份数据库时,用的是普通用户,在凌晨三点备份的时候,可能碰巧网站正在被访问(比如蜘蛛抓取)。由于存在数据查询,所以 my
张戈
2018/03/23
1.2K0
Linux 制作脚本,实现定时备份到腾讯云对象存储
版权声明:本站原创文章 Linux 制作脚本,实现定时备份到腾讯云对象存储 由 小维 发表! 转载请注明:Linux 制作脚本,实现定时备份到腾讯云对象存储 - 小维的个人博客 部分素材来源于网络,如有侵权请联系删除!
程序员纬度
2021/03/02
1.8K0
如何将您的Git存储库备份到腾讯云COS
依赖源代码存储库进行版本控制是一种最佳的方法,当代码更改导致应用程序崩溃或行为不正常时,可以恢复运行。但是,如果发生诸如不小心删除分支或无法访问存储库等严重性事件,我们应该利用其他更高级恢复策略。
水门
2018/08/13
4.9K0
在Ubuntu 16.04如何使用Percona将MySQL类别的数据库备份到指定的对象存储上呢?
数据库通常会在您的基础架构中存储一些最有价值的信息。因此,在发生事故或硬件故障时,必须具有可靠的备份以防止数据丢失。
木纸鸢
2018/08/10
13.8K0
AI 助力全自动化备份到对象存储
网上有很多教程,写的都是从零搭建一个什么什么,基本上都是从无到有的教程,但是,很少有文章提及搭建好之后如何备份,我觉得备份才是一个系统生命周期内永恒的主题,是一个值得花时间严肃对待的问题。
2023/08/25
3.7K0
python 腾讯云cos对象存储上传脚本
本文转自: https://www.bthlt.com 每日上传腾讯云cos本地数据日志: #!/usr/bin/env python # coding=utf-8 # author: wz # mail: 277215243@qq.com # datetime:2019/10/18 1:24 PM # web: https://www.bthlt.com from qcloud_cos import CosConfig from qcloud_cos import CosS3Client from qcl
葫芦
2019/10/24
8.5K0
WordPress如何使用腾讯云对象存储COS存储媒体库附件
这篇文章来介绍一下通过使用插件实现将 WordPress 的媒体库附件存储在腾讯云 COS 上。
沈唁
2023/09/25
1.2K2
使用腾讯云对象存储 COS 作为 Velero 后端存储,实现集群资源备份和还原
Velero(以前称为 Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷,可以在 TKE 集群或自建 Kubenetes 集群中部署 Velero 用于:
云存储
2020/12/24
3.4K0
COS对象存储数据冗余备份方案
一般意义上,备份指的是数据备份或系统备份,容灾指的是不在同一机房的数据备份或应用系统备份。备份采用备份软件技术实现,而容灾通过复制或镜像软件实现,两者的根本区别在于:
wainsun
2023/03/07
3.8K0
COS对象存储数据冗余备份方案
SCF VS Code 实践:备份MySQL数据库至腾讯云COS
https://cloud.tencent.com/document/product/583/38090
孤鸿寄语
2019/10/03
1.6K0
使用腾讯云 SCF 云函数压缩 COS 对象存储文件
腾讯云serverless团队
2017/10/17
17K2
腾讯云COS对象存储的简单使用
叮当哥之前买了一年的腾讯云服务器,昨日偶然发现腾讯云送了叮当哥半年的cos对象存储服务器,于是就撸起袖子传了几张珍藏的大图上去,现将其上传的简单使用步骤总结一波(其它操作参加官方SDK文档API)。
宋先生
2019/07/18
19.3K1
Linux定时备份数据库到COS
配置COSCMD COSCMD是腾讯云官方的命令行工具,可通过简单的命令行指令实现对对象的批量上传、下载、删除等操作。 安装COSCMD $ pip install coscmd $ coscmd -h # 测试是否安装成功 在root目录下创建配置文件.cos.conf,并写入配置 secret_id:密钥中的SecretId secret_key:密钥中的SecretKey bucket:存储桶名称 region:存储桶所在地域 [common] secret_id = <Yo
Naraku
2021/07/28
1.8K0
使用腾讯云函数SCF快速解压对象存储COS中的ZIP文件
在本实践中,我们用到了云函数 SCF 和对象存储 COS。假定用户上传到 COS 的 zip 文件需要进行解压缩,并以 zip 包名作为文件夹名,回传到 COS。用户可根据示例代码进行扩展,例如支持其他格式文件的解压缩操作。
云存储
2019/11/26
4.3K0
使用腾讯云函数SCF快速解压对象存储COS中的ZIP文件
腾讯云对象存储
  对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
别团等shy哥发育
2023/02/25
59.1K2
腾讯云对象存储
数据备份到对象存储(cos)
之前我,写过利用bypy+crontab 实现定时数据备份到百度网盘, ,大家也知道百度网盘的一个缺点就是下载速度太慢,当然如果你是会员就当我没说,下面给你们介绍如何把数据备份到腾讯的cos中,腾讯的数据存储新用户会有6个月的50G标准存储容量。 环境:Java和腾讯云的迁移工具
云计算小黑
2022/12/28
2K0
数据备份到对象存储(cos)
Python 操作腾讯对象存储(COS)详细教程
django项目中,使用editormd时需要上传本地图片,使用到了腾讯对象存储,通过后台可以将图片上传到COS,由此记录一下。 <font color="red">想了解django中如何引入markdown编辑器可以参考此篇文章 --> django 中引入markdown编辑器</font> 1. 腾讯对象存储 1.1 开通服务 腾讯COS 开通后会赠送免费额度 1.2 后台 [pdf9xkzo3p.png] 1.3 创建桶 [8fwacun695.png] 1.4 上传文件及查看 上传文件 [ck2
ruochen
2021/01/17
7.2K1
Python 操作腾讯对象存储(COS)详细教程
腾讯云ES集群通过COS实现跨地域备份与恢复
在日常开发及运维工作中,我们经常会遇到一些内外部的客户希望将不同地域的es集群迁移到另外一个地域。例如有的客户es集群原来是在北京地域,由于一些原因,现在想要将集群迁移到上海地域来。下面我们就详细介绍下借助腾讯云COS和es的snapshot功能来实现跨地域的数据迁移。
吴容
2020/07/29
2.8K1
腾讯云ES集群通过COS实现跨地域备份与恢复
推荐阅读
相关推荐
利用腾讯云COS云对象存储定时远程备份网站
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验