脚本远程备份网站数据到免费的腾讯云COS对象存储
腾讯云提供的对象存储免费方案:入站流量免费,出站流量10G,我们备份网站到腾讯云就属于上传的入站流量,而我们一般不会轻易去一直下载备份的网站回来,因此出站的10G流量一般情况下也够用,再加上免费的对象存储空间50G,因此基本上大部分个人网站都是够用了。

以下进入正题:
一、配置腾讯云COS对象存储空间
1、开通腾讯云COS,并创建Bucket
访问腾讯云COS(https://console.qcloud.com/cos4/bucket)开通对象存储服务(需要先实名认证),按下面方法创建Bucket,为安全起见选择私有读写:

2、查看密匙
点击左侧的密钥管理,进入密钥界面创建密钥,如果之前已经创建过密钥,那可以直接使用:

记下来:AppID,SecretID和SecretKey的信息
二、配置服务器或者VPS上的支持环境
1、按顺序安装腾讯云Python SDK组件:
#安装pip
#升级pip(yum装的可能版本比较旧)
#安装腾讯云COS SDK插件
#安装pip
#升级pip(yum装的可能版本比较旧)
#安装腾讯云COS SDK插件
2、根据SDK文档编写用于上传文件到腾讯云COS的脚本
将上述代码保存为 cos.upload.py,并上传到服务器,执行如下命令可开始上传文件到OSS:
python /data/oss.upload.py appid secret_id secret_key Bucket名称 域名 /data/backup.zip
其中: 1~3个参数是appid、认证ID和认证密钥,写入第一步记下来的密钥信息; 第4个参数是前文创建的Bucket名称,比如mybackup 第5个参数是需要备份的域名(新增的:主要是为了区分下) 第6个参数是要上传的本地文件的绝对路径 执行后,就能在COS的Object界面看到了上传的文件:
三、自动定时备份
有了上传脚本,但是还没有自动备份功能,为了偷懒我们再结合Shell脚本写个自动备份上传功能。
1、COS七天自动循环备份脚本
Shell脚本

以下进入正题:
一、配置腾讯云COS对象存储空间
1、开通腾讯云COS,并创建Bucket
访问腾讯云COS(https://console.qcloud.com/cos4/bucket)开通对象存储服务(需要先实名认证),按下面方法创建Bucket,为安全起见选择私有读写:

2、查看密匙
点击左侧的密钥管理,进入密钥界面创建密钥,如果之前已经创建过密钥,那可以直接使用:

记下来:AppID,SecretID和SecretKey的信息
二、配置服务器或者VPS上的支持环境
1、按顺序安装腾讯云Python SDK组件:
#安装pip
yum install python-pip
#升级pip(yum装的可能版本比较旧)
pip install --upgrade pip
#安装腾讯云COS SDK插件
pip install qcloud_cos_v4
#安装pip
yum install python-pip
#升级pip(yum装的可能版本比较旧)
pip install --upgrade pip
#安装腾讯云COS SDK插件
pip install qcloud_cos_v4这里以用的最多的CENTOS为例,其他系统代码大同小异。
2、根据SDK文档编写用于上传文件到腾讯云COS的脚本
# -*- coding: utf-8 -*-
# Upload File To Qcloud COS
from qcloud_cos import CosClient
from qcloud_cos import UploadFileRequest
import sys
region = "shanghai" #替换为COS所在区域,可选shanghai(华东)/guangzhou(华南)/tianjin(华北)/chengdu(西南)
#脚本需要传入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 bnxb.com /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') )
3、使用方法: 将上述代码保存为 cos.upload.py,并上传到服务器,执行如下命令可开始上传文件到OSS:
python /data/oss.upload.py appid secret_id secret_key Bucket名称 域名 /data/backup.zip
其中: 1~3个参数是appid、认证ID和认证密钥,写入第一步记下来的密钥信息; 第4个参数是前文创建的Bucket名称,比如mybackup 第5个参数是需要备份的域名(新增的:主要是为了区分下) 第6个参数是要上传的本地文件的绝对路径 执行后,就能在COS的Object界面看到了上传的文件:
三、自动定时备份
有了上传脚本,但是还没有自动备份功能,为了偷懒我们再结合Shell脚本写个自动备份上传功能。
1、COS七天自动循环备份脚本
Shell脚本
#!/bin/sh
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 bnxb.com bnxbcom_db bnxb 123456 /home/wwwbackup/bnxb.com
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 bnxb.com /home/wwwroot/bnxb.com /home/wwwbackup/bnxb.com
=====================================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 bnxb.com..." && 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 bnxb.com..." && 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 bnxb.com..." && exit 2)
test -d $back_path || (mkdir -p $back_path || echo "$back_path not found! Please CheckOut Or feedback to bnxb.com..." && 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
2、使用方法
将上述代码作如下修改:
I、根据实际情况修改上述代码中的COS上传函数代码,比如密钥对和Bucket名称(参考前文)
II、替换代码中的mypassword=123456为自己设置的压缩包密码,不修改的话压缩文件解压密码为123456
然后,将代码保存为backup.sh,上传到服务器(建议存放到和前文python脚本的相同目录),比如 /data/backup.sh,最后如下添加定时任务:
#编辑crontab
[root@BnxbCom ~]# crontab -e
#然后添加如下内容:
#备份数据库(参数依次为:db、域名、数据库名称、数据库用户名、对应密码、备份路径 [可选:y 删除本地压缩包])
10 3 * * * bash /data/backup.sh db bnxb.com bnxb root 123456 /home/wwwbackup/bnxb.com > /dev/null 2>&1
#备份网站文件(参数依次为:file、域名、网站根目录、备份路径 [可选:y 删除本地压缩包])
15 3 * * * bash /data/backup.sh file bnxb.com /home/wwwroot/bnxb.com /home/wwwbackup/bnxb.com >/dev/null 2>&1
#按下键盘esc,输入 :wq
顶(4)
踩(0)
- 最新评论
