Node定時備份MySQL的實現(xiàn)
前言
前段時間發(fā)生了一件令我哭笑不得的事,部署在 Centos
服務(wù)器上的項目,因為需要重新上傳· 部署
,所以我執(zhí)行了下面一段命令:
rm -rf /*
當(dāng)我按下回車之后,發(fā)現(xiàn)終端閃過的一行行代碼,突然感覺事情并不簡單,情急之下,趕緊 ctrl c
中斷終端,中斷之后,便開始通過 fpt
上傳文件,卻發(fā)現(xiàn) ftp
毫無反應(yīng),這下慌了,不會把系統(tǒng)給干沒了吧!
接下來我決定 重啟
服務(wù)器,可是,emmm...,啟動不了了!真的把系統(tǒng)給干沒了!詢問大佬們之后,聽說 阿里云
如果存在 快照
,則可以恢復(fù),可是我并沒有保存過快照!直接GG,程序沒了倒無所謂,可是 數(shù)據(jù)庫沒了。
這時我意識到,需要做個 定時任務(wù)
,定時 備份
數(shù)據(jù)庫,結(jié)合之前封裝的 Email
類,將備份的數(shù)據(jù)庫發(fā)送至郵箱,所以才有了這篇文章。
開發(fā)部署
因為我后端使用的是 nodejs
,這里就使用 nodejs
編寫定時任務(wù)吧。
安裝依賴
這里需要 node-schedule
依賴來執(zhí)行定時任務(wù),需要 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
,所有的備份操作都在此方法內(nèi):
export const backupDb = () => {}
在方法內(nèi)使用 時間戳
定義備份 唯一
文件名,并 創(chuàng)建流
:
export const backupDb = () => { const dumpFileName = `${Math.round(Date.now() / 1000)}.dump.sql`; const writeStream = fs.createWriteStream(dumpFileName); }
在方法內(nèi)定義備份腳本:
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("備份失敗") }) }) }
當(dāng)然這里寫死的數(shù)據(jù)還可以作為函數(shù)參數(shù)可進(jìn)行控制,另外這里的 0 0 1 * * *
表示 每天凌晨1點
備份,具體時間格式可參考下圖,或官方文檔:
在備份成功的回調(diào)中,調(diào)用 Email
類將備份內(nèi)容發(fā)送至 郵箱
,這里不作為重點就暫且不寫。
最后在 src/command/index.js
文件中 引入
備份方法并 調(diào)用
:
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ù)庫進(jìn)行 備份
,并發(fā)送至 郵箱
。
結(jié)語
到此這篇關(guān)于Node定時備份MySQL的實現(xiàn)的文章就介紹到這了,更多相關(guān)Node定時備份MySQL內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node使用promise替代回調(diào)函數(shù)
這篇文章主要介紹了node使用promise替代回調(diào)函數(shù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05Node.js折騰記一:讀指定文件夾,輸出該文件夾的文件樹詳解
這篇文章主要介紹了Node.js讀指定文件夾輸出該文件夾文件樹,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04使用node.js半年來總結(jié)的 10 條經(jīng)驗
從3月初來到帝都某創(chuàng)業(yè)公司的服務(wù)器團(tuán)隊實習(xí),到現(xiàn)在已接近半年的時間。PS: 已轉(zhuǎn)正,服務(wù)器端用的 Node。2014-08-08Node.js+Express+Vue+MySQL+axios的項目搭建全過程
這篇文章主要介紹了Node.js+Express+Vue+MySQL+axios的項目搭建全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12express express-session的使用小結(jié)
這篇文章主要介紹了express express-session的使用小結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12PHP和NodeJs開發(fā)的應(yīng)用如何共用Session
這篇文章主要介紹了PHP和NodeJs開發(fā)的應(yīng)用如何共用Session的相關(guān)資料及思路,需要的朋友可以參考下2015-04-04解決Node.js使用MySQL出現(xiàn)connect ECONNREFUSED 127.0.0.1:3306的問題
這篇文章主要介紹了解決Node.js使用MySQL出現(xiàn)connect ECONNREFUSED 127.0.0.1:3306報錯的相關(guān)資料,文中將問題描述的很清楚,解決的方法也介紹的很完整,需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03