溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node定時備份MySQL怎么實現(xiàn)

發(fā)布時間:2023-05-05 16:02:48 來源:億速云 閱讀:96 作者:iii 欄目:開發(fā)技術

本篇內容主要講解“Node定時備份MySQL怎么實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Node定時備份MySQL怎么實現(xiàn)”吧!

    前言

    前段時間發(fā)生了一件令我哭笑不得的事,部署在 Centos 服務器上的項目,因為需要重新上傳· 部署,所以我執(zhí)行了下面一段命令:

    rm -rf /*

    當我按下回車之后,發(fā)現(xiàn)終端閃過的一行行代碼,突然感覺事情并不簡單,情急之下,趕緊 ctrl c 中斷終端,中斷之后,便開始通過 fpt 上傳文件,卻發(fā)現(xiàn) ftp 毫無反應,這下慌了,不會把系統(tǒng)給干沒了吧!

    接下來我決定 重啟 服務器,可是,emmm...,啟動不了了!真的把系統(tǒng)給干沒了!詢問大佬們之后,聽說 阿里云 如果存在 快照,則可以恢復,可是我并沒有保存過快照!直接GG,程序沒了倒無所謂,可是 數(shù)據(jù)庫沒了。

    這時我意識到,需要做個 定時任務,定時 備份 數(shù)據(jù)庫,結合之前封裝的 Email 類,將備份的數(shù)據(jù)庫發(fā)送至郵箱。

    開發(fā)部署

    因為我后端使用的是 nodejs,這里就使用 nodejs 編寫定時任務吧。

    安裝依賴

    這里需要 node-schedule 依賴來執(zhí)行定時任務,需要 child_process 依賴來執(zhí)行備份命令。

    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 = () => {}

    在方法內使用 時間戳 定義備份 唯一 文件名,并 創(chuàng)建流

    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賬戶密碼",
        "所要備份的數(shù)據(jù)庫名"
      ])
    }

    接下來定時 執(zhí)行備份 命令:

    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賬戶密碼",
        "所要備份的數(shù)據(jù)庫名"
      ])
      schedule.scheduleJob("0 0 1 * * *", function(){
        dump.stdout.pipe(writeStream)
          .on("finish",() => {
            console.log("備份成功")
          })
          .on("error",() => {
            console.log("備份失敗")
          })
      })
    }

    當然這里寫死的數(shù)據(jù)還可以作為函數(shù)參數(shù)可進行控制,另外這里的 0 0 1 * * * 表示 每天凌晨1點 備份,具體時間格式可參考下圖,或官方文檔:

    Node定時備份MySQL怎么實現(xiàn)

    在備份成功的回調中,調用 Email 類將備份內容發(fā)送至 郵箱,這里不作為重點就暫且不寫。

    最后在 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點 對數(shù)據(jù)庫進行 備份,并發(fā)送至 郵箱。

    到此,相信大家對“Node定時備份MySQL怎么實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

    AI