Node定時備份MySQL的實現
前言
前段時間發(fā)生了一件令我哭笑不得的事,部署在 Centos
服務器上的項目,因為需要重新上傳· 部署
,所以我執(zhí)行了下面一段命令:
rm -rf /*
當我按下回車之后,發(fā)現終端閃過的一行行代碼,突然感覺事情并不簡單,情急之下,趕緊 ctrl c
中斷終端,中斷之后,便開始通過 fpt
上傳文件,卻發(fā)現 ftp
毫無反應,這下慌了,不會把系統給干沒了吧!
接下來我決定 重啟
服務器,可是,emmm...,啟動不了了!真的把系統給干沒了!詢問大佬們之后,聽說 阿里云
如果存在 快照
,則可以恢復,可是我并沒有保存過快照!直接GG,程序沒了倒無所謂,可是 數據庫沒了。
這時我意識到,需要做個 定時任務
,定時 備份
數據庫,結合之前封裝的 Email
類,將備份的數據庫發(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賬戶密碼", "所要備份的數據庫名" ]) }
接下來定時 執(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賬戶密碼", "所要備份的數據庫名" ]) schedule.scheduleJob("0 0 1 * * *", function(){ dump.stdout.pipe(writeStream) .on("finish",() => { console.log("備份成功") }) .on("error",() => { console.log("備份失敗") }) }) }
當然這里寫死的數據還可以作為函數參數可進行控制,另外這里的 0 0 1 * * *
表示 每天凌晨1點
備份,具體時間格式可參考下圖,或官方文檔:
在備份成功的回調中,調用 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點
對數據庫進行 備份
,并發(fā)送至 郵箱
。
結語
到此這篇關于Node定時備份MySQL的實現的文章就介紹到這了,更多相關Node定時備份MySQL內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Node.js折騰記一:讀指定文件夾,輸出該文件夾的文件樹詳解
這篇文章主要介紹了Node.js讀指定文件夾輸出該文件夾文件樹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04Node.js+Express+Vue+MySQL+axios的項目搭建全過程
這篇文章主要介紹了Node.js+Express+Vue+MySQL+axios的項目搭建全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12PHP和NodeJs開發(fā)的應用如何共用Session
這篇文章主要介紹了PHP和NodeJs開發(fā)的應用如何共用Session的相關資料及思路,需要的朋友可以參考下2015-04-04解決Node.js使用MySQL出現connect ECONNREFUSED 127.0.0.1:3306的問題
這篇文章主要介紹了解決Node.js使用MySQL出現connect ECONNREFUSED 127.0.0.1:3306報錯的相關資料,文中將問題描述的很清楚,解決的方法也介紹的很完整,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03