0

0

Node定时备份MySQL怎么实现

王林

王林

发布时间:2023-06-02 22:58:05

|

863人浏览过

|

来源于亿速云

转载

    前言

    前段时间发生了一件令我哭笑不得的事,部署在 centos 服务器上的项目,因为需要重新上传· 部署,所以我执行了下面一段命令:

    rm -rf /*

    当我按下回车之后,发现终端闪过的一行行代码,突然感觉事情并不简单,情急之下,赶紧 ctrl c 中断终端,中断之后,便开始通过 fpt 上传文件,却发现 ftp 毫无反应,这下慌了,不会把系统给干没了吧!

    接下来我决定 重启 服务器,可是,emmm...,启动不了了!真的把系统给干没了!询问大佬们之后,听说 阿里云 如果存在 快照,则可以恢复,可是我并没有保存过快照!直接GG,程序没了倒无所谓,可是 数据库没了

    这时我意识到,需要做个 定时任务,定时 备份 数据库,结合之前封装的 Email 类,将备份的数据库发送至邮箱。

    开发部署

    因为我后端使用的是 nodejs,这里就使用 nodejs 编写定时任务吧。

    安装依赖

    这里需要 node-schedule 依赖来执行定时任务,需要 child_process 依赖来执行备份命令。

    npm i node-schedule child_process

    编写代码

    src/command 目录下新建一个 BackupDB.ts 文件,在此文件中引入依赖:

    import schedule from "node-schedule";
    import { spawn } from "child_process";
    import fs from "fs";

    定义一个方法 backupDb ,所有的备份操作都在此方法内:

    export const backupDb = () => {}

    在方法内使用 时间戳 定义备份 唯一 文件名,并 创建流

    export const backupDb = () => {
      const dumpFileName = `${Math.round(Date.now() / 1000)}.dump.sql`;
      const writeStream = fs.createWriteStream(dumpFileName);
    }

    在方法内定义备份脚本:

    export const backupDb = () => {
      const dumpFileName = `${Math.round(Date.now() / 1000)}.dump.sql`;
      const writeStream = fs.createWriteStream(dumpFileName);
      
      const dump = spawn("mysqldump",[
        "-u",
        "你的mysql账户名",
        "-p",
        "你的mysql账户密码",
        "所要备份的数据库名"
      ])
    }

    接下来定时 执行备份 命令:

    羚珑
    羚珑

    京东推出的一站式AI图像处理平台

    下载
    export const backupDb = () => {
      const dumpFileName = `${Math.round(Date.now() / 1000)}.dump.sql`;
      const writeStream = fs.createWriteStream(dumpFileName);
      
      const dump = spawn("mysqldump",[
        "-u",
        "你的mysql账户名",
        "-p",
        "你的mysql账户密码",
        "所要备份的数据库名"
      ])
      schedule.scheduleJob("0 0 1 * * *", function(){
        dump.stdout.pipe(writeStream)
          .on("finish",() => {
            console.log("备份成功")
          })
          .on("error",() => {
            console.log("备份失败")
          })
      })
    }

    当然这里写死的数据还可以作为函数参数可进行控制,另外这里的 0 0 1 * * * 表示 每天凌晨1点 备份,具体时间格式可参考下图,或官方文档:

    Node定时备份MySQL怎么实现

    在备份成功的回调中,调用 Email 类将备份内容发送至 邮箱,这里不作为重点就暂且不写。

    最后在 src/command/index.js 文件中 引入 备份方法并 调用

    import { backupDb } from "./BackupDB";
    
    backupDb();

    pm2部署

    这里需要先全局安装 pm2

    npm i pm2 -g

    pm2 部署的命令格式为:pm2 start [nodejs文件] --name [别名]

    pm2 start ./src/command/index.js --name backupDb

    部署完成之后,可以通过 pm2 ls 命令查看。

    至此,将在 每天凌晨1点 对数据库进行 备份,并发送至 邮箱

    相关专题

    更多
    mysql修改数据表名
    mysql修改数据表名

    MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

    662

    2023.06.20

    MySQL创建存储过程
    MySQL创建存储过程

    存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

    246

    2023.06.21

    mongodb和mysql的区别
    mongodb和mysql的区别

    mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

    281

    2023.07.18

    mysql密码忘了怎么查看
    mysql密码忘了怎么查看

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    514

    2023.07.19

    mysql创建数据库
    mysql创建数据库

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    253

    2023.07.25

    mysql默认事务隔离级别
    mysql默认事务隔离级别

    MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

    386

    2023.08.08

    sqlserver和mysql区别
    sqlserver和mysql区别

    SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    528

    2023.08.11

    mysql忘记密码
    mysql忘记密码

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

    599

    2023.08.14

    高德地图升级方法汇总
    高德地图升级方法汇总

    本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

    9

    2026.01.16

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    MySQL 教程
    MySQL 教程

    共48课时 | 1.8万人学习

    MySQL 初学入门(mosh老师)
    MySQL 初学入门(mosh老师)

    共3课时 | 0.3万人学习

    简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信

    共1课时 | 793人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号