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

偶素浅小浅 偶素浅小浅     2022-08-23     519

关键词:

版权声明:本文由张戈  原创文章,转载请注明出处: 
文章原文链接:https://www.qcloud.com/community/article/942851001487125915

来源:腾云阁 https://www.qcloud.com/community

 

技术分享

一、优点分析

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

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

看下定价方案:

①、入流量免费

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

②、各种免费额度

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

二、准备工作

①、开通COS,并创建Bucket

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

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

②、添加密钥

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

三、备份脚本

人生苦短,我用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界面看到了上传的文件:
技术分享

四、定时备份

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

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

#!/bin/sh
###################################################################
#  Web Backup version 1.0.0 Author: Jager <[email protected]>        #
# 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
[[email protected]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远程备份了!

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

五、幕后花絮

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

技术分享

 










wordpress安装wpcos插件分离图片至腾讯云对象存储加速网站

我们在前面的文章中已经通过"WordPress配置腾讯云对象存储COS之存储桶创建和设置"和"腾讯云对象存储COS绑定域名/开启CDN/设置免费SSL证书"两篇文章完成对于腾讯云对象存储COS的梳理,我们已经会在腾讯云COS中创建存储桶,以及绑... 查看详情

如何在typecho中使用腾讯云对象存储cos?

如何在typecho中使用腾讯云对象存储cos?要详细点,和插件链接,谢谢插件没有,最简单的应用就是将静态的资源上传到cos,比如将博客代码整个放到cos,开启静态网站,这是一种。还有一种就是将某些图片等上传到cos,在html代码... 查看详情

使用宝塔面板如何自动备份数据库和网站代码(代码片段)

...间、阿里云OSS、谷歌云网盘、谷歌云存储、七牛云存储、腾讯云COS这么多的存储工具,多种选择,还不够你放备份文件吗?我使用的是七牛云存储,七牛云提供了永久免费的10G存储空间,我们可以创建私有的存储空间,绑定加速... 查看详情

腾讯云对象存储操作流程

文章目录​​1、腾讯云对象存储介绍​​​​1.1、开通“对象存储COS”服务​​​​1.2、创建Bucket​​​​1.3、创建API秘钥​​1、腾讯云对象存储介绍1.1、开通“对象存储COS”服务(1)申请腾讯云账号:https://cloud.tencent.com/(2... 查看详情

腾讯云cos对象存储的简单使用(代码片段)

  叮当哥之前买了一年的腾讯云服务器,昨日偶然发现腾讯云送了叮当哥半年的cos对象存储服务器,于是就撸起袖子传了几张珍藏的高清大图上去,现将其上传的简单使用步骤总结一波(其它操作参加官方SDK文档API)。说明:... 查看详情

备份数据上传腾讯云cos(代码片段)

一、方案背景由于服务器上数据量越来越大,备份的数据会占用硬盘空间(虽说云硬盘可随时扩容,但是存在风险),定时将备份上传到COS。不仅节省服务器硬盘空间,也大大提高备份数据的安全性、可靠性。二、操作步骤1、软件... 查看详情

关于腾讯云对象储存cos的配置方法简单说明

参考技术A前言:COS是腾讯云提供的对象存储服务,功能非常强大,可以作为文件服务器,CDN加速,静态网页服务,还提供了图片的常用操作。相关API文档:https://cloud.tencent.com/document/product/436/77511.申请腾讯云对象储存,免费没个... 查看详情

使用腾讯云cos对象存储(详细流程)(代码片段)

一、开通COS对象存储 二、创建存储桶 基本信息所属地域:请选择与您业务(或用户数量)相对集中的物理区域所对应的COS地域,设置后不可修改。地域的更多信息请参见 地域和访问域名。名称:请输入自... 查看详情

python脚本上传文件到腾讯云cos对象存储

...执行结果:提示>5G的文件不能上传。小文件是可以的。腾讯云-对象存储-分块上传待有空,将文件改为参数传入 查看详情

腾讯云对象存储使用(代码片段)

快速使用1.注册腾讯云2.进入对象存储-->存储桶列表-->创建存储桶3.查看右上角sdk文档,根据文档走下来1.安装sdk手动安装:直接拷贝js内容到项目目录utils下命名cos-wx-sdk-v5.jsnpm安装:npminstallcos-wx-sdk-v52.小程序中引入varCOS=requir... 查看详情

php腾讯云cos使用之我见

...为某些人的原因,本文从新改名发布一遍。原名称:tp5--腾讯云cos简单使用原文链接:https://www.cnblogs.com/YFYQ/p/10840050.html因项目需要,本来是需要对接阿里云oss,但因客户错误将云存储买成腾讯云cos,因此简单做了个对象上传使用... 查看详情

腾讯云对象存储

腾讯云对象存储配置一个腾讯云cos由于开发的特殊性,我们不希望把所有的图片都上传到我们自己的官方服务器上,这里我们可以采用一个腾讯云的图片方案上边图的意思就是说,我们找一个可以免费上传图片的服务... 查看详情

前端探索云存储用得好,静态资源没烦恼(代码片段)

文章目录COSCDN腾讯云COS和CDN腾讯云API的使用API文档ExpressJS服务端接口测试进一步优化总结本文主要介绍了,用COS和CDN存储静态资源,以及腾讯云API的使用。COS对象存储(CloudObjectStorage,COS)是腾讯云提供的一... 查看详情

前端探索云存储用得好,静态资源没烦恼(代码片段)

文章目录COSCDN腾讯云COS和CDN腾讯云API的使用API文档ExpressJS服务端接口测试进一步优化总结本文主要介绍了,用COS和CDN存储静态资源,以及腾讯云API的使用。COS对象存储(CloudObjectStorage,COS)是腾讯云提供的一... 查看详情

mysql5.7.40备份到腾讯云cos+从cos恢复(代码片段)

1备份1.1安装coscli#wgethttps://github.com/tencentyun/coscli/releases/download/v0.12.0-beta/coscli-linux#mvcoscli-linux/usr/bin/coscli#chmod755/usr/bin/coscli#coscli--version如果github慢可以使用国内镜像:wgetht 查看详情

mysql5.7.40备份到腾讯云cos+从cos恢复(代码片段)

1备份1.1安装coscli#wgethttps://github.com/tencentyun/coscli/releases/download/v0.12.0-beta/coscli-linux#mvcoscli-linux/usr/bin/coscli#chmod755/usr/bin/coscli#coscli--version如果github慢可以使用国内镜像:wgethttps://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux1.2准... 查看详情

[视频教程]利用ssh隧道进行远程腾讯云服务器项目xdebug调试(代码片段)

我的远程服务器是腾讯云的ubuntu系统机器,本地我的电脑系统是deepin的系统,使用的IDE是vscode。现在就来使用本地的IDE来调试腾讯云中为网站项目实现逻辑是访问网站域名后,请求被转发给腾讯云本地的9001端口,通过ssh隧道,... 查看详情

阿里云oss和腾讯云cos互相迁移(代码片段)

利用阿里、腾讯的帮助文档中提供的迁移工具测试迁移对象存储数据。一、腾讯to阿里文档链接:https://help.aliyun.com/document_detail/56990.html?spm=5176.7851628.6.1079.UqBdXKOssImport工具可以将本地、其它云存储的数据迁移到OSS,它有以下特点... 查看详情