网站文件及数据库备份至对象存储OSS

备份的网站文件和数据库,存放备份是个问题。存放到哪里更安全可靠,且要实现自动循环备份,不用手动操作就完美了。找了很多的资料,有使用ftp自动上传到本地的循环备份方法,还有使用阿里的对象存储OSS循环备份的……但是配置这些又得花费不少的时间(对我而言)。

网上搜索参考了一些资料,其实相关的资料并不多,还非常的零散且并没有适用性。因为每个人的环境配置都不会相同,因此资料仅能作为参考,最后是否能配置成功,还是得自己花时间去摸索、测试。我这里选择了对象存储OSS,这个我觉得是最放心、省心的,前提是自己能配置成功。(从来没有接触过的产品,还要购买存储容量。40G存储容量,半年5元,就玩一下吧。流量、请求数都是需要按量计费的。)

一、安装 Python SDK

环境准备

OSS Python SDK适用于Python 2.6、2.7、3.3、3.4、3.5版本。

查看版本

执行命令python -V查看Python版本。

查看版本后,使用 exit() 退出python。(我没用过还真不知道怎么退出)

安装python-devel

[root@iz2zecnv***0sp3z ~]# yum install python-devel
Loaded plugins: fastestmirror
base                                                     | 3.6 kB     00:00
epel                                                     | 3.2 kB     00:00
extras                                                   | 3.4 kB     00:00
mysql-connectors-community                               | 2.5 kB     00:00
mysql-tools-community                                    | 2.5 kB     00:00
mysql57-community                                        | 2.5 kB     00:00
updates                                                  | 3.4 kB     00:00
webtatic                                                 | 3.6 kB     00:00
(1/2): epel/x86_64/updateinfo                              | 939 kB   00:00
(2/2): epel/x86_64/primary                                 | 3.6 MB   00:00
Loading mirror speeds from cached hostfile
 * webtatic: uk.repo.webtatic.com
epel                                                                12782/12782
Resolving Dependencies
--> Running transaction check
...
Complete!

安装SDK

[root@iz2zecnv***0sp3z ~]# pip install oss2
Collecting oss2
  Downloading http://mirrors.aliyun.com/pypi/packages/fe/c6/ab8293c1bcfa5487fe8326c29714767b085d2475fec30d59b71ca77ea006/oss2-2.*.0.tar.gz (139kB)
    100% |████████████████████████████████| 143kB 1.5MB/s
...
Successfully installed aliyun-python-sdk-core-2.*.4 aliyun-python-sdk-kms-2.*.0 crcmod-1.7 oss2-2.*.0 pycryptodome-3.*.2
You are using pip version *.*.*, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

验证SDK版本

[root@iz2zecnv***0sp3z ~]# python
Python 2.*.* (default, Oct 30 2018, 23:45:53)
[GCC 4.*.* 20***3 (Red Hat 4.*.*-*)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import oss2
>>> oss2.__version__
'2.*.0'
>>>

验证crcmod

>>> import crcmod._crcfunext
>>> 

没有任何提示,表明crcmod库的C扩展模式安装成功。如有错误提示,请参考阿里官方文档。

二、创建存储空间(Bucket)

这里直接在对象存储OSS控制台创建即可。

主要注意区域,相同区域内的产品内网可以互通不计流量。读写权限设为私有,必须的。至于其他的设置,创建好空间之后进入基础设置,再根据自己的需要设置完成即可。

三、配置服务器备份及上传脚本

python脚本,负责上传到OSS的upload.py

如下代码:

# -*- coding: utf-8 -*-

from __future__ import print_function
import os, sys
import oss2

auth = oss2.Auth('LT**AccessKeyId**fX', '8u**AccessKeySecret**ha')

bucket = oss2.Bucket(auth, 'https://oss-cn-**Endpoin**-internal.aliyuncs.com', 'f**bucket**s')

#本地文件路径,要传入参数
filePath = sys.argv[1]

#传到OSS上的名称
fileName = filePath.split("/")[-1]

#上传进度条
def percentage(consumed_bytes, total_bytes):
    if total_bytes:
        rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
        print('\r{0}% '.format(rate), end='')
        sys.stdout.flush()

#上传文件
oss2.resumable_upload(bucket, fileName, filePath, progress_callback=percentage)
print('\rUpload to OSS Success!')

以上代码,我们需要填上AccessKeyId与AccessKeySecret,还有Endpoint与bucket,其他的不用修改。我就是在这个脚本这里浪费了许多时间,因为不懂怎么传入参数

其实是非常多的不懂,包括首次测试执行upload.py还遇到了问题。必须python /路径/upload.py

测试upload.py过程中,总是上传失败。比如我要上传/backup/mysql_bak.gz

传入参数执行,成功上传了。

python /root/upload.py /backup/mysql_bak.gz

因为我们备份的数据库文件的文件名是一个年月日时间命名的文件,文件名是一个变量,所以我们传入的这个参数也必须是一个变量。

用sh脚本执行upload.py传入参数

#!/bin/bash
DATE=`date +%Y%m%d%H%M`
FILENAME=wpcontent
BACKUP_PATH=/backup

python /root/upload.py ${BACKUP_PATH}/${FILENAME}_${DATE}.tar.gz

sh脚本代码中的DATE我们要修改一下,不能计算到分钟。计算到分钟的话,备份数据库与上传是没问题。备份网站文件的话,如果文件容量比较大,压缩时间比较长。那么备份网站开始的时间如果是19点35分,完成备份之后花费了5分钟,到19点40分才执行upload.py问题就来了。会出现找不到文件,因为变量(时间已经过去了5分钟)

因此修改DATE参数,只需精确到小时即可。

#!/bin/bash
DATE=`date +%Y%m%d%H`

备份网站并上传到OSS

我这只备份WordPress的wp-content这个文件夹。

#!/bin/bash
DATE=`date +%Y%m%d%H`
fileName=wpcontent
BACKUP_PATH=/backup
html_PATH=/var/www/html/wp-content

###这里-czPf参数,如果不加上P的话,会提示tar: 从成员名中删除开头的“/”###
tar -czPf $BACKUP_PATH/${fileName}_${DATE}.tar.gz $html_PATH && python /root/upload.py ${BACKUP_PATH}/${fileName}_${DATE}.tar.gz
###打包压缩好网站文件&&然后执行上传到OSS###

###本地保留5天的备份文件###
find ${BACKUP_PATH} -mtime +5 -name "${fileName}_*.tar.gz" -exec rm -f {} \;

数据库备份这里不说了,到这里基本完成站点备份的工作。对象存储OSS那边,设置一下生命周期,我觉得已经满意了。可以高枕无忧了,不然这几天一直都在折腾这搬迁刚刚结束的网站。

就到这里先吧,太累了,需要休息一段时间,再找东西折腾。

发表评论