【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也可以备份在另外一个用来备份的数据库,或者以附件的形式发送到邮箱,不一定要备份在服务端的目录里,是全凭业务来决定它备份的目的地。

相关推荐
陈随易6 小时前
有生之年系列,Nodejs进程管理pm2 v7.0发布
前端·后端·程序员
陈随易8 小时前
AI时代,你还在坚持手搓文章吗
前端·后端·程序员
大鱼七成饱9 小时前
VMware NAT模式下固定内网IP(附详细图文)
后端
IT_陈寒10 小时前
Vue的这个响应式陷阱,我debug了一整天才爬出来
前端·人工智能·后端
兔子零102411 小时前
手把手教你在 Claude Code 中接入 DeepSeek-V4
后端
phenhorlin11 小时前
我做了个工具,让切换 Homebrew 镜像像切 npm 源一样简单
后端·shell
69511 小时前
两周浅学 RAG
后端
AI人工智能+电脑小能手12 小时前
【大白话说Java面试题】【Java基础篇】第24题:Java面向对象有哪些特征
java·开发语言·后端·面试
AI人工智能+电脑小能手13 小时前
【大白话说Java面试题】【Java基础篇】第25题:JDK1.8的新特性有哪些
java·开发语言·后端·面试
fliter14 小时前
Wrangler:Cloudflare 给 Rust + WASM 开发者造的那把锤子
后端