前言:
这篇文章主要记录本身在备份数据库文件中踩的坑和解决办法。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
复制代码
到这里定时启动脚本执行数据库备份 并将其上传至七牛云已经配置成功啦!