版权声明:本文由张戈 原创文章,转载请注明出处: 
文章原文链接: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插件

  1. #安装pip
  2. yum install python-pip
  3. #升级pip(yum装的可能版本比较旧)
  4. pip install --upgrade pip
  5. #安装腾讯云COS SDK插件
  6. pip install qcloud_cos

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

②、上传脚本

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

  1. # -*- coding: utf-8 -*-
  2. # Upload File To Qcloud COS
  3. from qcloud_cos import CosClient
  4. from qcloud_cos import UploadFileRequest
  5. import sys
  6. #脚本需要传入6个参数
  7. if ( len(sys.argv) > 5 ):
  8. appid = int(sys.argv[1])
  9. secret_id = sys.argv[2].decode('utf-8')
  10. secret_key = sys.argv[3].decode('utf-8')
  11. bucket = sys.argv[4].decode('utf-8')
  12. domain = sys.argv[5].decode('utf-8')
  13. filePath = sys.argv[6].decode('utf-8')
  14. fileName = filePath.split("/")[-1]
  15. else:
  16. print("Example: python %s appid secret_id secret_key Bucket zhangge.net /data/backup.zip" % sys.argv[0])
  17. exit()
  18. #认证和上传
  19. cos_client = CosClient(appid, secret_id, secret_key)
  20. request = UploadFileRequest(bucket, '/%s/%s' % ( domain, fileName ), filePath)
  21. request.set_insert_only(0)
  22. upload_file_ret = cos_client.upload_file(request)
  23. print 'The File %s Upload to Bucket %s : %s ' % ( filePath , bucket , upload_file_ret.get('message') )

使用方法:将上述代码保存为 cos.upload.py,并上传到服务器,执行如下命令可开始上传文件到OSS:

  1. 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七天循环备份脚本

  1. #!/bin/sh
  2. ###################################################################
  3. # Web Backup version 1.0.0 Author: Jager <ge@zhangge.net> #
  4. # For more information please visit https://zhangge.net/5117.html #
  5. #-----------------------------------------------------------------#
  6. # Copyright ©2016 zhangge.net. All rights reserved. #
  7. ###################################################################
  8. isDel=n
  9. args=$#
  10. isDel=${!args}
  11. mypassword=123456
  12. test -f /etc/profile && . /etc/profile >/dev/null 2>&1
  13. baseDir=$(cd $(dirname $0) && pwd)
  14. zip --version >/dev/null || yum install -y zip
  15. ZIP=$(which zip)
  16. TODAY=`date +%u`
  17. PYTHON=$(which python)
  18. MYSQLDUMP=$(which mysqldump)
  19. # 新增的COS上传文件函数,请按照实际情况修改appID,认证KEY、认证密钥和Bucket名称!!!
  20. uploadToCOS()
  21. {
  22. $PYTHON $baseDir/cos.upload.py appID 认证KEY 认证密钥 Bucket名称 $1 $2
  23. if [[ $? -eq 0 ]] && [[ "$isDel" == "y" ]]
  24. then
  25. test -f $2 && rm -f $2
  26. fi
  27. }
  28. printHelp()
  29. {
  30. clear
  31. printf '
  32. =====================================Help infomation=========================================
  33. 1. Use For Backup database:
  34. The $1 must be [db]
  35. $2: [domain]
  36. $3: [dbname]
  37. $4: [mysqluser]
  38. $5: [mysqlpassword]
  39. $6: [back_path]
  40. $7: [isDel]
  41. For example:./backup.sh db zhangge.net zhangge_db zhangge 123456 /home/wwwbackup/zhangge.net
  42. 2. Use For Backup webfile:
  43. The $1 must be [\file]:
  44. $2: [domain]
  45. $3: [site_path]
  46. $4: [back_path]
  47. $5: [isDel]
  48. For example:./backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net
  49. =====================================End of Hlep==============================================
  50. '
  51. exit 0
  52. }
  53. backupDB()
  54. {
  55. domain=$1
  56. dbname=$2
  57. mysqluser=$3
  58. mysqlpd=$4
  59. back_path=$5
  60. test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
  61. cd $back_path
  62. #如果是要备份远程MySQL,则修改如下语句中localhost为远程MySQL地址
  63. $MYSQLDUMP -hlocahost -u$mysqluser -p$mysqlpd $dbname --skip-lock-tables --default-character-set=utf8 >$back_path/$domain\_db_$TODAY\.sql
  64. test -f $back_path/$domain\_db_$TODAY\.sql || (echo "MysqlDump failed! Please CheckOut Or feedback to zhangge.net..." && exit 2)
  65. $ZIP -P$mypassword -m $back_path/$domain\_db_$TODAY\.zip $domain\_db_$TODAY\.sql && \
  66. uploadToCOS $domain $back_path/$domain\_db_$TODAY\.zip
  67. }
  68. backupFile()
  69. {
  70. domain=$1
  71. site_path=$2
  72. back_path=$3
  73. test -d $site_path || (echo "$site_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
  74. test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to zhangge.net..." && exit 2)
  75. test -f $back_path/$domain\_$TODAY\.zip && rm -f $back_path/$domain\_$TODAY\.zip
  76. $ZIP -P$mypassword -9r $back_path/$domain\_$TODAY\.zip $site_path && \
  77. uploadToCOS $domain $back_path/$domain\_$TODAY\.zip
  78. }
  79. while [ $1 ]; do
  80. case $1 in
  81. '--db' | 'db' )
  82. backupDB $2 $3 $4 $5 $6
  83. exit
  84. ;;
  85. '--file' | 'file' )
  86. backupFile $2 $3 $4
  87. exit
  88. ;;
  89. * )
  90. printHelp
  91. exit
  92. ;;
  93. esac
  94. done
  95. printHelp

②、使用方法

将上述代码作如下修改:

I、根据实际情况修改上述代码中的COS上传函数代码,比如密钥对和Bucket名称(参考前文)
II、替换代码中的mypassword=123456为自己设置的压缩包密码,不修改的话压缩文件解压密码为123456

然后,将代码保存为backup.sh,上传到服务器(建议存放到和前文python脚本的相同目录),比如/data/backup.sh,最后如下添加定时任务:

  1. #编辑crontab
  2. [root@AlyServer ~]# crontab -e
  3. #然后添加如下内容:
  4. #备份数据库(参数依次为:db、域名、数据库名称、数据库用户名、对应密码、备份路径 [可选:y 删除本地压缩包])
  5. 10 3 * * * bash /data/backup.sh db zhangge.net zhangge root 123456 /home/wwwbackup/zhangge.net > /dev/null 2>&1
  6. #备份网站文件(参数依次为:file、域名、网站根目录、备份路径 [可选:y 删除本地压缩包])
  7. 15 3 * * * bash /data/backup.sh file zhangge.net /home/wwwroot/zhangge.net /home/wwwbackup/zhangge.net >/dev/null 2>&1
  8. #按下键盘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迁移工具等,感兴趣的朋友只需要看下 官方文档 就会弄了!

利用腾讯云COS云对象存储定时远程备份网站的更多相关文章

  1. 腾讯刘金明:腾讯云 EB 级对象存储架构深度剖析及实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲者:刘金明 腾讯云存储业务中心副总监 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来" ...

  2. 云-阿里云-OSS:对象存储 OSS

    ylbtech-云-阿里云-OSS:对象存储 OSS 对象存储服务(Object Storage Service,OSS)是一种海量.安全.低成本.高可靠的云存储服务,适合存放任意类型的文件.容量和处 ...

  3. 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能

    原文:利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能 利用修改div的位置+js对象存储div信息 实现简单的div自定义布局功能1.在界面上添加几个checkbox和一 ...

  4. costool - 腾讯云cos快捷工具。

    目录 使用截图 使用方法 配置文件 安装方法 其他 一个腾讯云cos(对象存储)非官方快速上传和下载的工具,使用官方go-sdk二次开发.可以用于以下场景. 备份一些配置文件,比如.bashrc .v ...

  5. 腾讯云存储专家深度解读基于Ceph对象存储的混合云机制

    背景 毫无疑问,乘着云计算发展的东风,Ceph已经是当今最火热的软件定义存储开源项目.如下图所示,它在同一底层平台之上可以对外提供三种存储接口,分别是文件存储.对象存储以及块存储,本文主要关注的是对象 ...

  6. .NET Core HttpClient调用腾讯云对象存储Web API的"ERROR_CGI_PARAM_NO_SUCH_OP"问题

    开门见山地说一下问题的原因:调用 web api 时请求头中多了双引号,请求体中少了双引号. 腾讯云提供的对象存储(COS)C# SDK 是基于 .NET Framework 用 WebRequest ...

  7. PHP 上传文件至阿里云OSS对象存储

    简述 1.阿里云开通对象存储服务 OSS 并创建Bucket 2.下载PHP SDK至框架扩展目录,点我下载 3.码上code 阿里云操作 开通对象存储服务 OSS 创建 Bucket 配置Acces ...

  8. Github 29K Star的开源对象存储方案——Minio入门宝典

    对象存储不是什么新技术了,但是从来都没有被替代掉.为什么?在这个大数据发展迅速地时代,数据已经不单单是简单的文本数据了,每天有大量的图片,视频数据产生,在短视频火爆的今天,这个数量还在增加.有数据表明 ...

  9. 22.Java面试学习平台-整合OSS对象存储

    SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...

随机推荐

  1. 如何确定拍照时,相机屏幕是横屏or竖屏?

    http://www.eoeandroid.com/thread-80028-1-1.html TAG_DATETIME时间日期 TAG_FLASH闪光灯 TAG_GPS_LATITUDE纬度 TAG ...

  2. Winform控件学习笔记【第四天】——WebBrowser

    常用方法 Navigate(string urlString);//浏览urlString表示的网址 Navigate(System.Uri url);//浏览url表示的网址 Navigate(st ...

  3. Blender下各种坐标系

    转载:https://jingyan.baidu.com/article/ed2a5d1f8f018309f7be1779.html 打开blender创建一个立方体.   切换到“自身”坐标系,旋转 ...

  4. JAVABEAN必须继承序列化借口的作用

    这里有人家对序列化的测试 http://www.javaeye.com/topic/350137 Java的"对象序列化"能让你将一个实现了Serializable接口的对象转换成 ...

  5. spark 非常好的学习内容

    http://homepage.cs.latrobe.edu.au/zhe/ZhenHeSparkRDDAPIExamples.html

  6. Xcode密钥没有备份或者证书过期,出现Valid Signing错误

    密钥没有备份 或者证书过期,和Xcode 4.4中的证书,出现  Valid Signing 错误时   1.生成私有证书,打开钥匙串,钥匙串访问 – 证书助理 – 从证书颁发机构请求证书…,填入iD ...

  7. [转帖]CentOS下iRedMail安装配置

    CentOS下iRedMail安装配置 中文名为艾瑞得邮件,由 rhms 项目更名而来.是针对 Linux 设计的邮件服务器解决方案,是在操作系统安装好后使用的一套 shell 脚本,用于快速部署一套 ...

  8. jquery animate动画持续运动

    function fingers(){ $(".box01 .fingers").animate({"width":"7.5rem",&qu ...

  9. 近5年常考Java面试题及答案整理(一)

    下列面试题都是在网上收集的,本人抱着学习的态度找了下参考答案,有不足的地方还请指正. 1.面向对象的特征有哪些方面? 抽象:将同类对象的共同特征提取出来构造类. 继承:基于基类创建新类. 封装:将数据 ...

  10. ubuntu 12.04 上网体验

    买了新的电脑,装的系统ubuntu12.04.  但是开始的时候无法使用有线网络,也没有办法连上无线网络.这相当于一个与世界剥离的裸机器,很是郁闷.于是在网上买了一个无线网卡tplink721, 但是 ...