前言:
這篇文章主要記錄本身在備份數據庫文件中踩的坑和解決辦法。vue
在服務器根目錄下 建立 /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
複製代碼
建立七牛的配置文件用於生成token數據庫
一、 根據AccessKey + SecretKey (可在我的中心=》祕鑰管理查看) + bucket(存儲空間名稱),生成token;
二、 使用圖片源(文件流/文件地址)和token提交信息到七牛存儲圖片;npm
一、服務器端上傳:分爲本地文件上傳、字節數組上傳; 二、 客戶端上傳:Base64模式上傳、Blob模式上傳;vim
在路徑爲 /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就是其中之一。
解決這個問題,能夠找一些替代的方案
experimental-modules
參數。 切記要求全部文件名後綴都修改成mjs
node –experimental-modules index.mjs
複製代碼
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 中是自動安裝好的。 詳細配置你們可參考 定時運行腳本配置
yum install crontabs
複製代碼
service crond start //啓動
service crond stop //關閉
service crond restart // 重啓
service crond reload //重載
service crond status //查看狀態
ntsysv //查看crontab服務是否已設置爲開機啓動
tail -f /var/log/cron // 查詢定時任務
複製代碼
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
複製代碼
到這裏定時啓動腳本執行數據庫備份 並將其上傳至七牛雲已經配置成功啦!