【NestJs】定时备份Mysql数据库

在项目里,数据是重中之重,我们需要保护数据免受未经授权的访问、损坏或盗窃,要在运维上做足一定的防御,例如在第三方平台购买防火墙之类的。而我们作为程序员,需要防止数据丢失,避免给项目、组织带来巨大的财富损失,那么定时备份数据库是一定要做的,这样能尽少的给项目、组织带来巨大的财富损失,才能控制在一定的损失范围,达到损失最小化的目的。

现在来讲讲如何在NestJs里定时备份数据库。

项目环境如下:

makefile 复制代码
node:16.18.0
npm: 8.19.2
mysql: 8.0.24

相关依赖版本:

bash 复制代码
nest: 10.0.3
@nestjs/schedule: 4.0.0
mysqldump:3.2.0

首先新建一个Nest项目,这里就不写流水账了,可看作者本人的掘金Nest文章,点击链接查看,然后安装依赖,执行下方命令

bash 复制代码
npm install @nestjs/schedule mysqldump

安装好后在项目的相关目录(可自定义),写上定时备份数据的方法,和备份数据的目录

Cron 是一个定义时间值的方法,可查阅下方两个文档/工具链接,这里不做太多的详述,因为作者也还不太熟悉。

Cron 速查手册:xunyidian.com/t/CronManua... Cron 小工具:crontab.guru/

方法的代码如下

typescript 复制代码
import { Injectable } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import mysqldump from 'mysqldump';
import configuration from '../../config/index'; // 不同环境的配置文件

@Injectable()
export class SqlTaskService {
  // 每天凌晨一点备份数据库,CronExpression.EVERY_DAY_AT_1AM
  // 每10秒,EVERY_10_SECONDS
  @Cron(CronExpression.EVERY_10_SECONDS, {
    name: 'sqlTask',
    timeZone: 'Asia/shanghai'
  })
  handleCron() {
    const sqlInfo = configuration().db.mysql
    mysqldump({
      connection: {
          host: sqlInfo.host, // 数据库地址
          user: sqlInfo.username, // 数据库帐号
          password: sqlInfo.password, // 数据库密码
          database: sqlInfo.database // 数据库表名
      },
      dumpToFile: `./backSql/${Math.round(Date.now() / 1000)}.sql`, // 存入的文件目录
    });
    console.log('备份数据库');
  }
}

备份数据库有两种业务情况,1、在项目启动时定时备份,2、在项目系统里给个开关写个接口手动备份。这里是定时任务,所以要在项目启动时执行方法,所以要在app.module里引入方法

代码如下:

然后启动项目看看,每隔10秒就备份一次,成功了,然后用 Navicat 数据库管理工具导入备份好的SQL,数据存在即成功了。

当然,备份的SQL也可以备份在另外一个用来备份的数据库,或者以附件的形式发送到邮箱,不一定要备份在服务端的目录里,是全凭业务来决定它备份的目的地。

相关推荐
tan180°8 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
浪裡遊8 小时前
React Hooks全面解析:从基础到高级的实用指南
开发语言·前端·javascript·react.js·node.js·ecmascript·php
优创学社29 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
why技术9 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
幽络源小助理9 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
whale fall9 小时前
npm install安装的node_modules是什么
前端·npm·node.js
会飞的鱼先生9 小时前
Node.js-http模块
网络协议·http·node.js
ai小鬼头10 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github
简佐义的博客10 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang