博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何定时备份数据库并上传七牛云
阅读量:6981 次
发布时间:2019-06-27

本文共 4318 字,大约阅读时间需要 14 分钟。

前言:

这篇文章主要记录自己在备份数据库文件中踩的坑和解决办法。

服务器数据库备份文件之后上传到七牛云

  1. 备份数据库文件

在服务器根目录下 创建 /backup/qiniu/.backup.sh

#!/bin/bash    # vuemall 数据库名称     # blog_runner  vuemall 的管理用户    # admin        vuemall的用户密码        # 设定 文件夹    backUpFolder="/home/Garen/work/dbbackup/vuemall"  //定时保存打包数据库的文件 的位置     date_now=`date +%Y_%m_%d_%H%M`    backFileName=vuemall_$date_now        # 进入到指定文件夹 ,创建临时文件夹     cd $backUpFolder    mkdir -p $backFileName        mongodump -h 127.0.0.1:27017 -d vuemall -u blog_runner -p admin -o $backFileName        #打包备份数据库     tar zcvf $backFileName.tar.gz $backFileName        #  移除 临时文件夹    rm -rf $backFileName       复制代码
  1. 创建七牛的配置文件用于生成token

    文件上传

    1、 根据AccessKey + SecretKey (可在个人中心=》秘钥管理查看) + bucket(存储空间名称),生成token;

    2、 使用图片源(文件流/文件地址)和token提交信息到七牛存储图片;

    上传途径

    1、服务器端上传:分为本地文件上传、字节数组上传; 2、 客户端上传:Base64模式上传、Blob模式上传;

    服务端nodjs 上传

    在路径为 /backup/qiniu/下执行 npm init 创建==qiniu_config.js==

    npm i qiniu  //引入七牛 SDK复制代码

    下面是qiniu_config.js的内容

    'use strict';    import * as qiniu from 'qiniu'        export const getToken = (bucket) => {            var accessKey = '七牛云accesskey';            var secretKey = '七牛云secretKey;            var bucket = bucket            var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);                var options = {                    scope: bucket            }                var putPolicy = new qiniu.rs.PutPolicy(options);                return  putPolicy.uploadToken(mac);    }    复制代码

    创建upload.js

    'use strict';    import * as qiniu from 'qiniu'        import  {getToken} from  './qiniu_config.js'        const uploadToken = getToken('blog_node') // blog_node 是七牛云后台创建的仓库名称        console.log(uploadToken)        const config = new qiniu.conf.Config();    config.zone = qiniu.zone.Zone_z0; // 空间对应的机房    const formUploader = new qiniu.form_up.FormUploader(config);    const putExtra = new qiniu.form_up.PutExtra();            const parts  = process.env.NODE_ENV.split('@')    const file = parts[1] + '.tar.gz'    const filePath = parts[0] + '/' + file        const key=file;  //上传到服务器的名称    const localFile = filePath; // 本地文件路径    formUploader.putFile(uploadToken, key, localFile, putExtra, function (respErr,      respBody, respInfo) {      if (respErr) {        throw respErr;      }      if (respInfo.statusCode == 200) {        console.log(' 上传成功')        console.log(respBody);      } else {        console.log(respInfo.statusCode);        console.log(respBody);      }    });复制代码

    其中,对应的机房如下:

    1、华东 qiniu.zone.Zone_z01
    2、华北 qiniu.zone.Zone_z1
    3、华南 qiniu.zone.Zone_z2
    4、北美 qiniu.zone.Zone_na0

由于使用node 执行 upload.js 会报出 错误

SyntaxError: Unexpected token import复制代码

找到原因是,目前node只支持部分ES6的语法,有些ES6语法还不支持,而import就是其中之一。

解决这个问题,可以找一些替代的方案

  • 使用Babel-cli插件
  • 升级node 8.5 使用experimental-modules 参数。 切记要求所有文件名后缀都修改为mjs
    node  –experimental-modules index.mjs复制代码
  • 安装 babel-regiser
    npm i  babel-register babel-preset-env --save-dev复制代码
    创建.babelrc
    {  "presets": [      ["env", {        "targets": {          "node": "current"        }      }]    ] }复制代码

新建入口文件 将原来的入口文件 require 进来

require('babel-register')({       presets: [ 'env' ]   })   // Import the rest of our application.   module.exports = require('./upload.js')复制代码

本文中是使用的 安装 babel-resiger 方法 在目录下创建start.js

因此在.backup.sh脚本中 最后一行加上

# 启动 七牛云 上传脚本    NODE_ENV=$backUpFolder@$backFileName node /backup/qiniu/start.js 复制代码

执行脚本 .backup.sh 就 可以 在七牛云后台看到 已经备份好的数据库文件

启动 定时任务

我们想要设定一个时间 自动 去 执行备份并上传到 七牛云 使用 crontab 以下 是crontab的用法。 一般在centos 中是自动安装好的。 详细配置大家可参考

  1. 安装crontab
yum install crontabs复制代码
  1. 开启服务
service crond start  //启动service crond stop   //关闭service crond restart   // 重启service crond reload    //重载service crond status   //查看状态ntsysv   //查看crontab服务是否已设置为开机启动tail -f /var/log/cron  // 查询定时任务 复制代码
  1. 设置执行脚本
    编辑 vim /etc/crontab ,默认形式如下
SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=root# For details see man 4 crontabs# Example of job definition:# .---------------- minute (0 - 59)# |  .------------- hour (0 - 23)# |  |  .---------- day of month (1 - 31)# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat# |  |  |  |  |# *  *  *  *  * user-name  command to be executed                                     复制代码

设置每天的 02:00 以root用户执行

0 2 *  *  * root  sh  /backup/qiniu/.back.sh                    复制代码

到这里定时启动脚本执行数据库备份 并将其上传至七牛云已经配置成功啦!

转载地址:http://mmnpl.baihongyu.com/

你可能感兴趣的文章
文件上传的渐进式增强
查看>>
leetcode -- Sort Colors
查看>>
C#中使用自定义的纸张大小
查看>>
1z0-052 q209_3
查看>>
行测题哦
查看>>
JavaScript Window Navigator 浏览器本身的信息
查看>>
使用Android Ant在编译时混淆
查看>>
通过Servlet 将服务器硬盘图片 展示到浏览器
查看>>
linux_nand_driver
查看>>
语义化的软件版本号规则,你是否真的了解软件的版本号
查看>>
[通俗易懂]理解“委托”
查看>>
sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)...
查看>>
xocodebulid 自动化打包 解决提示 ld: library not found for -lPods 问题
查看>>
LPEG
查看>>
python none,null,,,,,类型
查看>>
HDU 3360 National Treasures 奇偶匹配的最低点覆盖
查看>>
/lib /usr/lib /usr/local/lib区别
查看>>
HDU - 5008 Boring String Problem (后缀数组+二分法+RMQ)
查看>>
Swift - 实现点击UITableView单元格时自动展开单元格
查看>>
Cocos2d-x3.0 Button
查看>>