一、优点分析
内网传输:和阿里云OSS一样,腾讯云COS同样支持内网和外网文件传输,对于腾讯云服务器,使用内网传输绝对是最快、最稳定的备份方案!
免费方案:看了下腾讯云COS的定价说明,发现对于备份网站来说简直是绝佳搭档,甚至可以说是钻了个空子(希望腾讯云的同事看到别打我。。。)!为啥这么说?
看下定价方案:
①、入流量免费
相当于我们上传文件的流量都是免费的,不区分内外网哦!内网就不说了,都懂。
②、各种免费额度
以七天循环备份(7份压缩包)以来算,单压缩包支持700M (700M*7≈50G),应付一般网站的备份绝对是足够足够足够了!
从上述摘选的定价方案来看,腾讯云COS比阿里云OSS更适合做网站备份,关键他还适合在第三方服务器上做远程备份,因为不但入流量(上传)免费,出流量(下载)也免费10GB。
二、准备工作
①、开通COS,并创建Bucket
访问腾讯云COS开通对象存储服务,然后如图创建Bucket:
Ps:我们只用于备份,且为私密资料,所以选择私有读写。
②、添加密钥
接着,我们点击左侧的密钥管理,进入密钥界面如图创建密钥,如果先前已经有密钥了,则可以直接使用:
Ps:这里我们需要记住3个信息:AppID,SecretID和SecretKey,待会要用。
三、备份工具
2019年6月22日更新:最近使用COS的时候,发现其实COS提供了一个更简单的上传下载工具:coscmd,所以上传下载这部分淘汰之前我自己写的Python脚本,改为coscmd,工具详细使用帮助请看官方文档。
①、环境准备
Linux下执行如下3条命令即可安装 coscmd
代码语言:javascript复制yum install python-pippip install --upgrade pippip install coscmd
Ps:如果安装失败,请参考官方文档提供的其他安装途径。
②、工具配置
配置 ~/.cos.conf
文件 (在 Windows 环境下,该文件是位于 我的文档
下的一个隐藏文件),该文件初始时不存在,是通过 coscmd config
命令生成,用户也可以手动创建。
Linux下直接执行如下命令即可(请先根据实际情况修改 secret_id、secret_key、bucket和region):
代码语言:javascript复制cat >~/.cos1.conf<<EOF[common]secret_id = AChT4ThiXAbpBDEFGhT4ThiXAbp****secret_key = WE54wreefvds3462refgwewe****bucket = 请根据实际情况修改region = 请根据实际情况修改,比如广州区域是 ap-guangzhoumax_thread = 5part_size = 1schema = httpsEOF
③、上传测试
工具配置好了之后,我们手工执行上传看看验证下结果,Linux执行如下命令行即可:
代码语言:javascript复制echo `date` > /tmp/test_upload.txtcoscmd upload /tmp/test_upload.txt test_upload.txt
执行后正常输出如下:
代码语言:javascript复制root@localhost:/# echo `date` > /tmp/test_upload.txtroot@localhost:/# coscmd upload /tmp/test_upload.txt test_upload.txtUpload /tmp/test_upload.txt => cos://jager/test_upload.txt
如果没有报错,我们登陆腾讯云COS就可以看到刚刚上传的文件了:
历史版本(已淘汰)
四、定时备份
有了上传脚本,继续结合之前张戈博客分享的七天循环备份脚本,实现循环备份到COS了,既安全还节省COS空间。
①、适合COS七天循环备份脚本
代码语言:javascript复制#!/bin/sh#################################################################### Web Backup version 1.0.0 Author: Jager <im@zhang.ge> ## For more information please visit https://zhang.ge/5117.html ##-----------------------------------------------------------------## Copyright ©2016 zhang.ge. All rights reserved. #################################################################### isDel=nargs=$#isDel=${!args}# 设置压缩包解压密码mypassword=123456 test -f /etc/profile && . /etc/profile >/dev/null 2>&1baseDir=$(cd $(dirname $0) && pwd)zip --version >/dev/null || yum install -y zipZIP=$(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(){clearprintf '=====================================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 ;; esacdoneprintHelp
②、使用方法
将上述代码作如下修改:
I、根据实际情况修改上述代码中的COS上传函数代码,比如密钥对和Bucket名称(参考前文)
II、替换代码中的mypassword=123456为自己设置的压缩包密码,不修改的话压缩文件解压密码为123456
然后,将代码保存为backup.sh,上传到服务器,比如 /data/backup.sh,最后如下添加定时任务:
代码语言:javascript复制#编辑crontab[root@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即可
本文就不赘述7天循环备份脚本的功能和更详细的使用方法了,若还是不清楚请参考前文:Linux/vps本地七天循环备份和七牛远程备份脚本
全部完成后,就能实现本地7天循环备份和COS远程备份了!如果,之前已经做了七牛远程备份的可以放心取消了。
之前有朋友留言说能否自动删除已上传的文件呢?这次修改简单的加入了一个是否删除的功能:只需要在脚本执行的最后追加一个 y 参数,成功上传到COS后就会自动删除本次备份的压缩包了(看不懂的慎用)。