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

相关推荐
xcya5 分钟前
Java ReentrantLock 核心用法
后端
用户4665370150517 分钟前
如何在 IntelliJ IDEA 中可视化压缩提交到生产分支
后端·github
小楓120123 分钟前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
天天摸鱼的java工程师26 分钟前
Java 解析 JSON 文件:八年老开发的实战总结(从业务到代码)
java·后端·面试
白仑色27 分钟前
Spring Boot 全局异常处理
java·spring boot·后端·全局异常处理·统一返回格式
之诺33 分钟前
MySQL通信过程字符集转换
后端·mysql
喵手33 分钟前
反射机制:你真的了解它的“能力”吗?
java·后端·java ee
用户4665370150534 分钟前
git代码压缩合并
后端·github
武大打工仔38 分钟前
从零开始手搓一个MVC框架
后端
开心猴爷44 分钟前
移动端网页调试实战 Cookie 丢失问题的排查与优化
后端