Node定時備份MySQL的實現
前言
前段時間發生瞭一件令我哭笑不得的事,部署在 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賬戶密碼", "所要備份的數據庫名" ]) }
接下來定時 執行備份
命令:
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點
備份,具體時間格式可參考下圖,或官方文檔:
在備份成功的回調中,調用 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點
對數據庫進行 備份
,並發送至 郵箱
。
結語
到此這篇關於Node定時備份MySQL的實現的文章就介紹到這瞭,更多相關Node定時備份MySQL內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Node.js進程管理之子進程詳解
- node執行cmd或shell命令使用介紹
- node.js調用腳本(python/shell)和系統命令
- 如何用Node.js編寫內存效率高的應用程序
- node腳本實現自動化簽到和抽獎功能