用阿里云 oss 保存数据库备份

内容纲要

概述

OSS 是阿里云推出的对象存储服务,它和云盘不一样。云盘是可以映射为服务器的目录的,但是 OSS 只能通过专门的工具来访问。

如果使用过分布式文件系统 DFS 的话,可以将 OSS 想象成 DFS。

oss 的用途

用途很多,主要是对象存储;oss 官网上有介绍,其中图片内容识别我还是比较感兴趣的,简单的说是给图片打标签,不知道是不是免费的,以后有空研究下

我购买 oss 主要是 2 个用途

  • 图床
  • 备份,比如保存云服务器的快照,或者数据库的备份文件

目前图床功能已经实现了,所以接下来就是做备份了

数据库备份 DBS

阿里云有个数据库备份 DBS,我研究了一下,可以备份 ECS 上的自建数据库,我数据源都建好了,创建备份计划时发现居然是收费的,而且价格不菲;另外,也没有找到怎么备份到 oss 上

所以 DBS 备份被 pass 了

ossutil

有 4 种方式可以使用 oss

  • 控制台
  • ossbrowser
  • ossutil
  • sdk

前两种都是图形界面,需要交互的,不适合用来做数据库备份,ossutil 是个命令行工具,sdk 则是用于程序里操作 oss 的开发库。很自然的,ossutil 是唯一的选择了

基本思路:写个脚本,将 mysql 数据库备份到文件,再用 ossutil 将备份文件存储到 oss,用 crontab 调度脚本自动执行,整个备份过程就算是 ok 了

ossutil 下载和安装

# 下载
wget https://gosspublic.alicdn.com/ossutil/1.7.0/ossutil64

# 赋予执行权限
chmod a+x ossutil64

# 配置
./ossutil64 config

配置 ossutil 时,会有如下几个配置项

  • 配置文件路径,直接回车即可
  • 语言,选项为 CH/EN,默认是 EN,输入 CH 即可
  • accessKeySecret,访问 oss 的阿里云帐号或者 ram 子账号的 AccessKey
  • stsToken,直接回车即可
  • endpoint,输入 bucket 的 endpoint
  • accessKeyID,访问 oss 的阿里云帐号或者 ram 子账号的 AccessKey

这样就安装完成了

ossutil 使用

先看下帮助

./ossutil64 help
用法: ossutil [command] [args...] [options...]
请使用ossutil help command来显示command命令的帮助

Commands:
  mb                cloud_url [options]
        创建Bucket
  ls                [cloud_url] [options]
        列举Buckets或者Objects
  rm                cloud_url [options]
        删除Bucket或Objects
  stat              cloud_url [options]
        显示bucket或者object的描述信息
  set-acl           cloud_url [acl] [options]
        设置bucket或者objects的acl
  set-meta          cloud_url [meta] [options]
        设置已上传的objects的元信息
  cp                src_url dest_url [options]
        上传,下载或拷贝Objects
  restore           cloud_url [local_xml_file] [options]
        恢复冷冻状态的Objects为可读状态
  create-symlink    cloud_url target_url [options]
        创建符号链接
  read-symlink      cloud_url [options]
        读取符号链接文件的描述信息
  sign              cloud_url [meta] [options]
        生成object下载链接
  probe             file_name [options]
        探测命令,支持多种功能探测
  mkdir             dir_name [options]
        创建一个目录,在oss中目录名字有后缀字符'/'
  cors              bucket_url [local_xml_file] [options]
        设置、查询或者删除bucket的cors配置
  logging           src_bucket_url target_bucket_url [options]
        设置、查询或者删除bucket的log配置
  referer           bucket_url referer [options]
        设置、查询或者删除bucket的referer配置
  listpart          oss_object uploadid [options]
        列出没有完成分块上传的object的分块信息
  getallpartsize    bucket_url [options]
        获取bucket所有未完成上传的multipart object的分块大小以及总和
  appendfromfile    local_file_name oss_object [options]
        将本地文件内容以append上传方式上传到oss中的appendable object中
  cat               object [options]
        将文件内容输出到标准输出
  bucket-tagging    bucket_url [tag_parameter] [options]
        设置、查询或者删除bucket的tag配置
  bucket-encryption bucket_url [options]
        设置、查询或者删除bucket的encryption配置
  cors-options      oss_url [options]
        向oss发送http options请求,用于CORS检测
  lifecycle         bucket_url local_xml_file [options]
        设置、查询或者删除bucket的lifecycle配置
  website           bucket_url local_xml_file [options]
        设置、查询或者删除bucket的website配置
  bucket-qos        bucket_url [local_xml_file] [options]
        设置、查询或者删除bucket的qos配置
  user-qos          [local_file] [options]
        查询用户的qos配置
  bucket-versioning bucket_url [versioning_parameter] [options]
        设置、查询bucket的versioning配置
  du                bucket_url [options]
        获取bucket或者指定前缀(目录)所占的存储空间大小
  bucket-policy     bucket_url [local_json_file] [options]
        设置、查询或者删除bucket的policy配置
  request-payment   bucket_url [payment_parameter] [options]
        设置、查询bucket的访问者付费配置
  object-tagging    cloud_url [tag_parameter] [options]
        设置、查询或者删除object的tag配置
  inventory         bucket_url [local_xml_file] [id] [options]
        添加、查询、删除或者列举bucket的清单配置
  revert-versioning cloud_url [options]
        将object从删除状态恢复成最近的多版本状态
  sync              src dest [options]
        将本地文件目录或者oss prefix从源端同步到目的端

Additional Commands:
  help              [command]
        获取命令的帮助文档
  config            [options]
        创建配置文件用以存储配置项
  hash              file_url [options]
        计算本地文件的crc64或md5
  update            [options]
        更新ossutil

查看 bucket

./ossutil64 ls
CreationTime                                 Region    StorageClass    BucketName
2020-11-29 22:47:47 +0800 CST       oss-cn-shenzhen         Archive    oss://dbbak-refusea
2020-11-29 09:46:45 +0800 CST       oss-cn-shenzhen        Standard    oss://static-refusea
Bucket Number is: 2

0.144840(s) elapsed

可以看到我的 oss 有 2 个 bucket,分别是

  • static-refusea,这个是用来做图床的
  • dbbak-refusea,这个是用来存放数据库备份的

查看 bucket 上的文件

看下 static-refusea 上有哪些文件,要注意的是查看某个 bucket 需要用 ls oss://bucket-name 的格式

./ossutil64 ls oss://static-refusea
LastModifiedTime                   Size(B)  StorageClass   ETAG                                  ObjectName
2020-11-30 10:24:28 +0800 CST       289038      Standard   464A68ABD942139B0821CEA5734EAD3B      oss://static-refusea/2020/11/Jd_item.png
2020-11-30 10:25:00 +0800 CST       125610      Standard   B702B93BB0B8F59211B8BE695E179B5D      oss://static-refusea/2020/11/Netease_comment.png
2020-11-29 15:37:20 +0800 CST         2908      Standard   B8E4EE13DA2735BEDD6769F2C02B15CE      oss://static-refusea/2020/11/cropped-goose_on_moon-2-180x180.jpg
2020-11-29 15:37:20 +0800 CST         3058      Standard   5822C70DFFEBFA4809C23A7CB140F518      oss://static-refusea/2020/11/cropped-goose_on_moon-2-192x192.jpg
2020-11-29 15:37:20 +0800 CST         4695      Standard   58CC7C45EEC7B1CB9B3D75E64E03FEFA      oss://static-refusea/2020/11/cropped-goose_on_moon-2-270x270.jpg
2020-11-29 15:37:20 +0800 CST          902      Standard   50CCAC992E7DD89B70A67B99605FB6EF      oss://static-refusea/2020/11/cropped-goose_on_moon-2-32x32.jpg
2020-11-29 15:37:20 +0800 CST        13790      Standard   39D71108E20EA88405E7FEA00B13E97E      oss://static-refusea/2020/11/cropped-goose_on_moon-2.jpg
2020-11-29 22:25:28 +0800 CST       107042      Standard   03784B2CFD25430894D15DC7BDCEA0EF      oss://static-refusea/2020/11/forest.jpg
2020-11-29 15:36:25 +0800 CST        33645      Standard   633F214BE405BC57EE9046A304C823C6      oss://static-refusea/2020/11/goose_on_moon.jpg
2020-11-29 15:47:55 +0800 CST        29314      Standard   F188F7B667CB54F42DDA11121B5D8811      oss://static-refusea/2020/11/happy.jpg
2020-11-30 10:35:06 +0800 CST         3325      Standard   841E3CC8C1F5983626ED50E7B0DB2D2B      oss://static-refusea/2020/11/p_delta.png
2020-11-30 10:21:43 +0800 CST        57921      Standard   9023D02F295B5AAAC5BDFA4C5961D42B      oss://static-refusea/2020/11/page_nav.png
2020-11-30 10:33:46 +0800 CST        55027      Standard   BD78E387F802ACC75D34D5EA387A97B5      oss://static-refusea/2020/11/pm_hr1.png
2020-11-30 10:34:15 +0800 CST        60186      Standard   A7627A3DF950FB69D5F9FD7D14BDC036      oss://static-refusea/2020/11/pm_hr2.png
2020-11-29 23:50:10 +0800 CST        19256      Standard   D0289DC0A46FC5B15B3363FFA78CF6C7      oss://static-refusea/ghs.png

将文件存储到 bucket

接下来往 bucket 上存储一个文件

# 创建一个文件 free.txt,将用这个文件测试
free >> free.txt

查看下 dbbak-refusea 上的文件

./ossutil64 ls oss://dbbak-refusea
Object Number is: 0

0.030432(s) elapsed

可以看到 bucket 是空的

接下来把 free.txt 存储到 dbbak.refusea 上

# 复制
./ossutil64 cp free.txt oss://dbbak-refusea
Succeed: Total num: 1, size: 204. OK num: 1(upload 1 files).

average speed 5000(byte/s)

0.037738(s) elapsed

# 查看
./ossutil64 ls oss://dbbak-refusea
LastModifiedTime                   Size(B)  StorageClass   ETAG                                  ObjectName
2020-12-01 15:37:12 +0800 CST          204       Archive   68AE7546E386BB26A2E5BAA835A486BD      oss://dbbak-refusea/free.txt
Object Number is: 1

0.029973(s) elapsed

可以看到 free.txt 成功的保存到了 bucket 上

从 bucket 上删除文件

接下来试下删除

# 删除
./ossutil64 rm oss://dbbak-refusea/free.txt
Succeed: Total 1 objects. Removed 1 objects.

0.062875(s) elapsed

# 查看
./ossutil64 ls oss://dbbak-refusea
Object Number is: 0

0.024768(s) elapsed

msyql 自动备份并将备份文件保存到 oss

在 /data/dbbak 下创建脚本 backup.sh,将 wordpress 数据库备份

#!/bin/bash
# 修改 my.cnf 文件,将用户名和密码写入 mysqldump 小节,就可以免密调用 mysqldump 命令了
mysqldump wordpress >> wordpress.bak
# 将备份文件存储到 oss 并强制覆盖已存在的文件
/root/download/ossutil64 cp -f /data/dbbak/wordpress.bak oss://dbbak-refusea > /dev/null
# 删除本地备份文件
rm -f wordpress.bak

用 crontab 调度,每天凌晨 2 点执行

0 2 * * * /data/dbbak/backup.sh
用阿里云 oss 保存数据库备份

One thought on “用阿里云 oss 保存数据库备份

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top
粤ICP备2020114259号 粤公网安备44030402004258