版权声明:本文由张戈 原创文章,转载请注明出处:
文章原文链接: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 <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远程备份了!
在文章的最后,为了方便广大代码小白朋友,特提供本文涉及脚本的打包下载:
五、幕后花絮
在折腾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迁移工具等,感兴趣的朋友只需要看下 官方文档 就会弄了!
来源:https://www.cnblogs.com/purpleraintear/p/6418352.html