如何定時備份數據庫並上傳七牛雲

前言:
這篇文章主要記錄本身在備份數據庫文件中踩的坑和解決辦法。vue

服務器數據庫備份文件以後上傳到七牛雲

  1. 備份數據庫文件

在服務器根目錄下 建立 /backup/qiniu/.backup.shnode

#!/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數據庫

    文件上傳

    一、 根據AccessKey + SecretKey (可在我的中心=》祕鑰管理查看) + bucket(存儲空間名稱),生成token;
    二、 使用圖片源(文件流/文件地址)和token提交信息到七牛存儲圖片;npm

    上傳途徑

    一、服務器端上傳:分爲本地文件上傳、字節數組上傳; 二、 客戶端上傳:Base64模式上傳、Blob模式上傳;vim

    服務端nodjs 上傳

    在路徑爲 /backup/qiniu/下執行 npm init 建立==qiniu_config.js==centos

    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.jsbash

    '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);
          }
        });
    
    複製代碼

    其中,對應的機房以下:
    一、華東 qiniu.zone.Zone_z01
    二、華北 qiniu.zone.Zone_z1
    三、華南 qiniu.zone.Zone_z2
    四、北美 qiniu.zone.Zone_na0服務器

因爲使用node 執行 upload.js 會報出 錯誤babel

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/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=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                    
複製代碼

到這裏定時啓動腳本執行數據庫備份 並將其上傳至七牛雲已經配置成功啦!

相關文章
相關標籤/搜索