当前位置: 首页 > 编程日记 > 正文

如何定时备份数据库并上传七牛云

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

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

  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 $backUpFoldermkdir -p $backFileNamemongodump -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 = bucketvar 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] + '/' + fileconst 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/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                    
复制代码

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

相关文章:

【OpenCV 】计算物体的凸包/创建包围轮廓的矩形和圆形边界框/createTrackbar添加滑动条/

目录 topic 1:模板匹配 topic 2:图像中寻找轮廓 topic 3:计算物体的凸包 topic 4:轮廓创建可倾斜的边界框和椭圆 topic 5:轮廓矩 topic 6:为程序界面添加滑动条 3.1 目标 3.2 代码实例1 3.3 代码实例2 3.4 实例3运行结果 3.5 运行结果 topic 1:模板匹配 topic 2:图…

开源:Angularjs示例--Sonar中项目使用语言分布图

在博客中介绍google的Angularjs 客户端PM模式框架很久了,今天发布一个关于AngularJs使用是简单示例SonarLanguage(示例位于Github:https://github.com/greengerong/SonarLanguage)。本项目只是一个全为客户端的示例项目。项目的初始是我想看看在公司的项…

adaptiveThreshold 阈值化的实现

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" int main( ) {// 图像读取及判断cv::Mat srcImage cv::imread("..\\images\\hand1.jpg");if( !srcImage.data ) return 1;// 灰度转换cv::Mat srcGray;cv::cvt…

hashMap传入参数,table长度为多少

前言 我的所有文章同步更新与Github--Java-Notes,想了解JVM,HashMap源码分析,spring相关,剑指offer题解(Java版),可以点个star。可以看我的github主页,每天都在更新哟。 邀请您跟我一同完成 rep…

【OpenCV】图像/视频相似度测量PSNR( Peak signal-to-noise ratio) and SSIM,视频/图片转换

目录 1 目标 2 原理 2.1 图像比较 - PSNR and SSIM 3 代码 3.1如何读取一个视频流(摄像头或者视频文件)? 3 运行效果 视频/图片转换: 如何用OpenCV创建一个视频文件用OpenCV能创建什么样的视频文件如何释放视频文件当中的某个颜色通道…

struts2提交list

2019独角兽企业重金招聘Python工程师标准>>> Action: private List<User> users; jsp: <input type"text" name"users[0].name" value"aaa" /> <input type"text" name"users[1].name" value&q…

双阈值法的实现

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" int main( ) {// 图像读取及判断cv::Mat srcImage cv::imread("..\\images\\hand1.jpg");if( !srcImage.data ) return 1;// 灰度转换cv::Mat srcGray;cv::cvt…

设计模式 小记

观察者模式 1.被观察者是单例模式。 生成这模式 1.Director中对于Builder的引用不一定是Strong&#xff0c;根据情况也有可能是Copy。 2.Director 聚合 Builder&#xff0c; 所以Builder本身可以单独拿出来使用。 转载于:https://juejin.im/post/5ca8c24df265da3094116c18

【MATLAB】————matlab raw图转bmp实现

image_path [layer_3_list_folder,\,layer_3_list_name]; img_raw_path fopen(image_path,r);%%打开图像 img_raw fread(img_raw_path,[Width,Height],uint16);% uchar为无符号字符型 mg_raw uint8(img_raw);%%unit8表示无符号整数&#xff0c;范围0-255&#xff0c;u…

人工手动冷备不完全恢复介绍(purge表不完全恢复)

不完全恢复不完全恢复的基本类型&#xff1a;1&#xff09;基于时间点 &#xff08;until time): 使整个数据库恢复到过去的一个时间点前2&#xff09;基于scn &#xff08;until change&#xff09;&#xff1a; 使整个数据库恢复到过去的某个SCN前3&#xff09;基于cancel (u…

半阈值法的实现

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> using namespace std; using namespace cv; int main( ) {// 读取源图像及判断cv::Mat srcImage cv::imread("..\\images\\hand1.jpg&q…

novaclient的api调用流程与开发

novaclient的api调用流程与开发 2015年07月05日 19:27:17 qiushanjushi 阅读数&#xff1a;3915 http://blog.csdn.net/tpiperatgod/article/details/18375387?utm_sourcetuicool 另一个地址&#xff1a;http://neuromancer.sinaapp.com/?p64 从nova client的入口查看 cat /u…

【C++】 保存内容到文件工具

1. c 输出到文件 // save mean distance between center and descriptorsstd::string filename configuration_.debug_output_path() "ref_max_mean_distance.txt";FILE* fp fopen(filename.c_str(), "w");try {if (fp nullptr) {return error::Failed…

你知道实习对你有多重要吗?

大学生就业一直是个永恒不变的话题&#xff0c;在过去几年中&#xff0c;每​‌‌次临近毕业季&#xff0c;我们肯定会一次次的听到“史上最难就业季”之说。而每一年的数据也会不断突破前一年的数字。在国新办举行的新闻发布会上&#xff0c;人力资源社会保障部部长尹蔚民提到…

灰度直方图的实现

#include <opencv2\opencv.hpp> int main() {// 图像源获取及判断 cv::Mat Image, ImageGray;Image cv::imread("..\\images\\flower3.jpg"); if(Image.empty()) return -1;cv::imshow("Image",Image);// 转换为灰度图像cv::cvtColor(Image,Image…

Android笔记之ViewModel的使用示例

依赖 implementation android.arch.lifecycle:extensions:1.1.1 implementation com.squareup.retrofit2:retrofit:2.5.0 implementation com.squareup.retrofit2:converter-gson:2.5.0 implementation com.squareup.retrofit2:adapter-rxjava2:2.5.0 implementation io.reacti…

vscode配置记录

vscode配置记录 按照官网教程安装好vs:实际上只需要配置launch.json的”program“如下所示 "configurations": [{"name": "(gdb) Launch","type": "cppdbg","request": "launch","program":…

unity 2d 游戏优化之路 遇坑记录

情景说明&#xff1a; unity 出的Android包&#xff0c;在目前一些主流机型跑都没有问题&#xff0c;但是在 小米3 这种比较老的机器上跑&#xff0c;报如下错误 GLSL compilation failed, no infolog provided 起先&#xff0c;我们一直以为是在低端机器上某个特定的GLSL 在这…

自定义直方图实现

#include <opencv2/opencv.hpp> int main() {// 图像获取及判断cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");if( !srcImage.data ) return 1;cv::imshow("srcImage",srcImage);// 灰度转换 cv::Mat srcGray;cv::cvtColor(srcImage,sr…

js数组指定位置添加删除

示例参考&#xff1a;http://www.w3school.com.cn/jsref/jsref_splice.asp转载于:https://www.cnblogs.com/CarryYou-lky/p/10669859.html

【C++】对象实例化/成员函数/成员变量的内存管理

文章目录1. 对象实例化的内存管理总结2.C成员函数在内存中的存储方式3.C类的实例化对象的大小之sizeof()实例一&#xff1a;实例二&#xff1a;实例三&#xff1a;实例四&#xff1a;实例五&#xff1a;实例六&#xff1a;实例七&#xff1a;实例八&#xff1a;实例九&#xff…

HTML form 标签的 enctype 属性

1. enctype 的定义和用法 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认地&#xff0c;表单数据会编码为 "application/x-www-form-urlencoded"。 就是说&#xff0c;在发送到服务器之前&#xff0c;所有字符都会进行编码&#xff08;空格转…

灰度直方图均衡化实现

#include <opencv2/opencv.hpp> int main() {cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");if( !srcImage.data ) return 1;cv::Mat srcGray;cv::cvtColor(srcImage, srcGray, CV_BGR2GRAY);cv::imshow("srcGray", srcGray);// 直方图均…

oracle汉化包下载地址

2019独角兽企业重金招聘Python工程师标准>>> https://www.allroundautomations.com/bodyplsqldevreg.html 转载于:https://my.oschina.net/u/3141521/blog/3034655

【C++】C/C++ 中 static 的用法全局变量与局部变量

C/C 中 static 的用法全局变量与局部变量 目录 1. 什么是static? 1.1 static 的引入 1.2 静态数据的存储 2. 在 C/C 中static的作用 2.1 总的来说 2.2 静态变量与普通变量 2.3 静态局部变量有以下特点&#xff1a; 实例 3. static 用法 3.1 在 C 中 3.2 静态类相关…

浅谈C/C++中的static和extern关键字

一.C语言中的static关键字 在C语言中&#xff0c;static可以用来修饰局部变量&#xff0c;全局变量以及函数。在不同的情况下static的作用不尽相同。 (1)修饰局部变量 一般情况下&#xff0c;对于局部变量是存放在栈区的&#xff0c;并且局部变量的生命周期在该语句块执行结束时…

彩色直方图均衡化实现

#include <opencv2/opencv.hpp> int main() {// 图像获取及验证cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");if( !srcImage.data ) return 1;// 存储彩色直方图及图像通道向量cv::Mat colorHeqImage; std::vector<cv::Mat> BGR_plane; …

二、python小功能记录——监听鼠标事件

1.原文链接 #-*- coding:utf-8 -*- from pynput.mouse import Button, Controller## ## 控制鼠标 ## # 读鼠标坐标 mouse Controller() print(The current pointer position is {0}.format(mouse.position)) # 设置鼠标坐标 mouse.position (10, 20) print(No…

【Smart_Point】C/C++ 中智能指针

C11智能指针 目录 C11智能指针 1.1 C11智能指针介绍 1.2 为什么要使用智能指针 1.2.1 auto_ptr&#xff08;C98的方案&#xff0c;C11已经抛弃&#xff09;采用所有权模式。 1.2.2 unique_ptr 1.2.3 shared_ptr 1.2.4 weak_ptr 1.3 share_ptr和weak_ptr的核心实现 1.…

Linux 虚拟内存和物理内存的理解【转】

转自:http://www.cnblogs.com/dyllove98/archive/2013/06/12/3132940.html 首先&#xff0c;让我们看下虚拟内存&#xff1a; 第一层理解 1. 每个进程都有自己独立的4G内存空间&#xff0c;各个进程的内存空间具有类似的结构 2. 一个新进程建立的时候&#xff0c…