数据备份是网站可持续性运营中至关重要的一个工作,如果还没有做任何备份机制的网站,建议尽早完善,莫要等到追悔莫及。

1.准备工作

一.开通bucket

访问阿里云 OSS控制台,点击开通OSS,然后新建一个Bucket(名称自定义),注意选择ECS相同的区域(比如深圳的ECS我就选择华南节点的),并且选择私有读写权限:

image.png

二.创建秘钥认证

在浏览器的右上角选择账户头像,选择如下点击accesskeys

image.png

点击创建accesskey

image.png

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

image.png

三.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/
# wget http://mirrors.ahaoyw.com/autoconf/lin/other/aliyun-oss-python-sdk-master.zip
# unzip aliyun-oss-python-sdk-master.zip
# cd aliyun-oss-python-sdk-master && python setup.py install && echo "Oss2 install OK" || \
echo "Oss2 install failed"

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界面看到了:

image.png

四、定时备份

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>        #
# For more information please visit https://www.ahaoyw.com/article/271.html #
#-----------------------------------------------------------------#
#  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>        #
# For more information please visit https://www.ahaoyw.com/article/271.html #
#-----------------------------------------------------------------#
#  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>        #
# For more information please visit https://www.ahaoyw.com/article/271.html #
#-----------------------------------------------------------------#
#  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这个备份调整跟数据库站点本地备份相差时间久点,以免数据没有备份完整,