5

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

 3 years ago
source link: https://zhang.ge/5117.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Jager · 1月2日 · 2017年shell · 七天循环备份 · 网站备份 · 远程备份 1001次已读

导读: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,待会要用。

三、备份工具

2019年6月22日更新:最近使用COS的时候,发现其实COS提供了一个更简单的上传下载工具:coscmd,所以上传下载这部分淘汰之前我自己写的Python脚本,改为coscmd,工具详细使用帮助请看官方文档

①、环境准备

Linux下执行如下3条命令即可安装 coscmd

yum install python-pip
pip install --upgrade pip
pip install coscmd

Ps:如果安装失败,请参考官方文档提供的其他安装途径。

②、工具配置

配置 ~/.cos.conf 文件 (在 Windows 环境下,该文件是位于 我的文档 下的一个隐藏文件),该文件初始时不存在,是通过 coscmd config 命令生成,用户也可以手动创建。

Linux下直接执行如下命令即可(请先根据实际情况修改 secret_id、secret_key、bucket和region):

cat >~/.cos1.conf<<EOF
[common]
secret_id = AChT4ThiXAbpBDEFGhT4ThiXAbp****
secret_key = WE54wreefvds3462refgwewe****
bucket = 请根据实际情况修改
region = 请根据实际情况修改,比如广州区域是 ap-guangzhou
max_thread = 5
part_size = 1
schema = https

③、上传测试

工具配置好了之后,我们手工执行上传看看验证下结果,Linux执行如下命令行即可:

echo `date` > /tmp/test_upload.txt
coscmd upload /tmp/test_upload.txt test_upload.txt

执行后正常输出如下:

root@localhost:/# echo `date` > /tmp/test_upload.txt
root@localhost:/# coscmd upload /tmp/test_upload.txt test_upload.txt
Upload /tmp/test_upload.txt => cos://jager/test_upload.txt

如果没有报错,我们登陆腾讯云COS就可以看到刚刚上传的文件了:

四、定时备份

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

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

#!/bin/sh
###################################################################
# Web Backup version 1.0.0 Author: Jager <[email protected]> #
# For more information please visit https://zhang.ge/5117.html #
#-----------------------------------------------------------------#
# Copyright ©2016 zhang.ge. 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)
# coscmd工具上传函数
uploadToCOS()
file=$2
domain=$1
file_name=$(basename $2)
coscmd upload $file $domain/$file_name
if [[ $? -eq 0 ]] && [[ "$isDel" == "y" ]]
test -f $2 && rm -f $2
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 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
'--file' | 'file' )
backupFile $2 $3 $4
printHelp
printHelp

②、使用方法

将上述代码作如下修改:

I、根据实际情况修改上述代码中的COS上传函数代码,比如密钥对和Bucket名称(参考前文

II、替换代码中的mypassword=123456为自己设置的压缩包密码,不修改的话压缩文件解压密码为123456

然后,将代码保存为backup.sh,上传到服务器,比如 /data/backup.sh,最后如下添加定时任务:

#编辑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后就会自动删除本次备份的压缩包了(看不懂的慎用)。

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

五、幕后花絮

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK