数据备份是网站可持续性运营中至关重要的一个工作,如果还没有做任何备份机制的网站,建议尽早完善,莫要等到追悔莫及。
1.准备工作
一.开通bucket
访问阿里云 OSS控制台,点击开通OSS,然后新建一个Bucket(名称自定义),注意选择ECS相同的区域(比如深圳的ECS我就选择华南节点的),并且选择私有读写权限:

二.创建秘钥认证
在浏览器的右上角选择账户头像,选择如下点击accesskeys

点击创建accesskey
创建得到的密钥对记得备忘一下,因为只能获取一次

三.SDK脚本
3.1环境准备
由于SDK需要crcmod库计算CRC校验码,而crcmod依赖Python.h文件,如果系统缺少这个头文件,安装SDK不会失败,但crcmod的C扩展模式安装会失败,因此导致上传、下载等操作效率非常低下。如果python-devel包不存在,则首先要安装这个包。
对于CentOS、RHEL、Fedora系统,请执行以下命令安装python-devel:
# yum install python-devel -y
对于Debian,Ubuntu系统,请执行以下命令安装python-devel:
# apt-get install python-dev -y
OSS的Python SDK需要用到oss2插件,所以我们先安装一下。
如果服务器上已经安装了pip工具,可直接执行如下命令安装oss2插件:
pip install oss2
若没有,则复制以下命令行到服务器上执行安装
# cd /usr/local/src/
访问https://github.com/aliyun/aliyun-oss-python-sdk下载压缩包
# unzip aliyun-oss-python-sdk-master.zip
# cd aliyun-oss-python-sdk-master && python setup.py install && echo "Oss2 install OK" || \ echo
3.2.上传脚本
# -*- coding: utf-8 -*-
from __future__ import print_function
import os, sys
import oss2
#
# 百分比显示回调函数
#
def percentage(consumed_bytes, total_bytes):
if total_bytes:
rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
print('\r{0}% '.format(rate), end=filePath)
sys.stdout.flush()
# 脚本需要传入5个参数
if ( len(sys.argv) > 5 ):
AccessKeyId = sys.argv[1]
AccessKeySecret = sys.argv[2]
Endpoint = sys.argv[3]
Bucket = sys.argv[4]
filePath = sys.argv[5]
fileName = filePath.split("/")[-1]
else:
print("Example: %s AccessKeyId AccessKeySecret Endpoint Bucket /data/backup.zip" % sys.argv[0])
exit()
# OSS认证并开始上传
auth = oss2.Auth(AccessKeyId , AccessKeySecret)
bucket = oss2.Bucket(auth, Endpoint, Bucket)
oss2.resumable_upload(bucket, fileName, filePath, progress_callback=percentage)
print('\rUpload %s to OSS Success!' % filePath)使用方法:将上述代码保存为 oss.upload.py,并上传到服务器,执行如下命令可开始上传文件到OSS
python /xmisp/server/shell/ossbak/oss.py 认证ID 认证密钥 oss-cn-shenzhen-internal.aliyuncs.com Bucket名称 /backup/www.ahaoyw.com-20190709.tar.gz
其中:
1~2个参数是认证ID和认证密钥就是前文创建并备忘的密钥对。
第3个参数是深圳区域的OSS内网地址,其他区域请参考OSS帮助文档,自行选择。
第4个参数是前文创建的Bucket名称,比如mystiebackup
第5个参数是要上传的本地文件的绝对路径
执行后,就能在OSS的Object界面看到了:

四、定时备份
PS:此定时备份脚本为每天执行备份,执行完备份后隔一个小时后上传到oss上,第二天备份的时候会删除前一天的本地备份,本机最新保留一份,oss保留天天备份的
1.远程备份到oss脚本,其中站点备份目录/home/wwwroot/backup/site ,数据库备份目录/home/wwwroot/backup/mysql
#/bin/bash ################################################################### # Web OSSBackup version 1.0 Author: 52szh <346284985@qq.com> # #-----------------------------------------------------------------# # Copyright ©2019 52szh All rights reserved. # ################################################################### A=`date +%Y%m%d` C=`date "+%F %H:%M:%S"` python /xmisp/server/shell/ossbak/oss.py 认证ID 认证密钥 oss-cn-shenzhen-internal.aliyuncs.com Bucket名称 /home/wwwroot/backup/site/www.ahaoyw.com-$A.tar.gz python /xmisp/server/shell/ossbak/oss.py 认证ID 认证密钥 oss-cn-shenzhen-internal.aliyuncs.com Bucket名称 /home/wwwroot/backup/mysql/sdm6606000001_db-$A.sql.gz echo $C >> /xmisp/logs/beifen/oss.log echo "Upload www.ahaoyw.com-$A.tar.gz sdm6606000001_db-$A.sql.gz to OSS Success!" >> /xmisp/logs/beifen/oss.log
2.站点备份脚本,站点存放路径为/home/wwwroot/www.ahaoyw.com,站点备份路径为/home/wwwroot/backup/site
#/bin/bash ################################################################### # Web OSSBackup version 1.0 Author: 52szh <346284985@qq.com> # #-----------------------------------------------------------------# # Copyright ©2019 52szh All rights reserved. # ################################################################### A=`date +%Y%m%d` tar -zcvf /home/wwwroot/backup/site/www.ahaoyw.com-$A.tar.gz /home/wwwroot/www.ahaoyw.com echo "www.ahaoyw.com backup success" $A >> /xmisp/logs/beifen/site.log find /home/wwwroot/backup/site/www.ahaoyw.com* -mtime +1 -type f |xargs rm -rf
3.数据库备份脚本,数据库备份存放路径为/home/wwwroot/backup/mysql/
#/bin/bash ################################################################### # Web OSSBackup version 1.0 Author: 52szh <346284985@qq.com> # #-----------------------------------------------------------------# # Copyright ©2019 52szh All rights reserved. # ################################################################### A=`date +%Y%m%d` mysqldump -u数据库用户名 -p数据库密码 数据库名 | gzip -9 > /home/wwwroot/backup/mysql/数据库名-$A.sql.gz echo "数据库名 backup success" $A >> /xmisp/logs/beifen/mysql.log find /home/wwwroot/backup/mysql/sdm6606000001_db* -mtime +1 -type f |xargs rm -rf
4.任务计划设置
00 0 * * * /bin/bash /xmisp/server/shell/webbackup.sh 00 0 * * * /bin/bash /xmisp/server/shell/mysqlbackup.sh 00 1 * * * /bin/bash /xmisp/server/shell/ycbf.sh
1.任务计划第一条,第二条为每天00点备份,第三条为oss远程备份定义为一点,是让站点数据库先备份后完成后在上传到oss的,.注意的是如果站点数据库比较大,建议吧oss这个备份调整跟数据库站点本地备份相差时间久点,以免数据没有备份完整,

