Node定時(shí)備份MySQL的實(shí)現(xiàn)
前言
前段時(shí)間發(fā)生了一件令我哭笑不得的事,部署在 Centos 服務(wù)器上的項(xiàng)目,因?yàn)樾枰匦律蟼?middot; 部署,所以我執(zhí)行了下面一段命令:
rm -rf /*
當(dāng)我按下回車之后,發(fā)現(xiàn)終端閃過的一行行代碼,突然感覺事情并不簡單,情急之下,趕緊 ctrl c 中斷終端,中斷之后,便開始通過 fpt 上傳文件,卻發(fā)現(xiàn) ftp 毫無反應(yīng),這下慌了,不會(huì)把系統(tǒng)給干沒了吧!
接下來我決定 重啟 服務(wù)器,可是,emmm...,啟動(dòng)不了了!真的把系統(tǒng)給干沒了!詢問大佬們之后,聽說 阿里云 如果存在 快照,則可以恢復(fù),可是我并沒有保存過快照!直接GG,程序沒了倒無所謂,可是 數(shù)據(jù)庫沒了。
這時(shí)我意識(shí)到,需要做個(gè) 定時(shí)任務(wù),定時(shí) 備份 數(shù)據(jù)庫,結(jié)合之前封裝的 Email 類,將備份的數(shù)據(jù)庫發(fā)送至郵箱,所以才有了這篇文章。
開發(fā)部署
因?yàn)槲液蠖耸褂玫氖?nodejs,這里就使用 nodejs 編寫定時(shí)任務(wù)吧。
安裝依賴
這里需要 node-schedule 依賴來執(zhí)行定時(shí)任務(wù),需要 child_process 依賴來執(zhí)行備份命令。
npm i node-schedule child_process
編寫代碼
在 src/command 目錄下新建一個(gè) BackupDB.ts 文件,在此文件中引入依賴:
import schedule from "node-schedule";
import { spawn } from "child_process";
import fs from "fs";
定義一個(gè)方法 backupDb ,所有的備份操作都在此方法內(nèi):
export const backupDb = () => {}
在方法內(nèi)使用 時(shí)間戳 定義備份 唯一 文件名,并 創(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ù)庫名"
])
}
接下來定時(shí) 執(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ǎn) 備份,具體時(shí)間格式可參考下圖,或官方文檔:

在備份成功的回調(diào)中,調(diào)用 Email 類將備份內(nèi)容發(fā)送至 郵箱,這里不作為重點(diǎn)就暫且不寫。
最后在 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點(diǎn) 對(duì)數(shù)據(jù)庫進(jìn)行 備份,并發(fā)送至 郵箱。
結(jié)語
到此這篇關(guān)于Node定時(shí)備份MySQL的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Node定時(shí)備份MySQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 在Windows環(huán)境下使用MySQL:實(shí)現(xiàn)自動(dòng)定時(shí)備份
- MySQL數(shù)據(jù)庫定時(shí)備份的實(shí)現(xiàn)方法
- mysql自動(dòng)定時(shí)備份數(shù)據(jù)庫的最佳方法(windows服務(wù)器)
- mysql定時(shí)自動(dòng)備份數(shù)據(jù)庫的方法步驟
- MySQL 數(shù)據(jù)庫定時(shí)備份的幾種方式(全面)
- MySQL定時(shí)備份之使用Linux下的crontab定時(shí)備份實(shí)例
- Mysql5.7定時(shí)備份的實(shí)現(xiàn)
- Python實(shí)現(xiàn)定時(shí)備份mysql數(shù)據(jù)庫并把備份數(shù)據(jù)庫郵件發(fā)送
相關(guān)文章
Node.js引入U(xiǎn)IBootstrap的方法示例
這篇文章主要介紹了Node.js引入U(xiǎn)IBootstrap的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
node基于puppeteer模擬登錄抓取頁面的實(shí)現(xiàn)
本篇文章主要介紹了node基于puppeteer模擬登錄抓取頁面的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05
Node.js操作mysql數(shù)據(jù)庫增刪改查
這篇文章主要介紹使用Node.js操作mysql數(shù)據(jù)庫增刪改查的相關(guān)資料,需要的朋友可以參考下2016-03-03
Node.js數(shù)據(jù)流Stream之Duplex流和Transform流用法
這篇文章介紹了Node.js數(shù)據(jù)流Stream之Duplex流和Transform流的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
node實(shí)現(xiàn)生成帶參數(shù)的小程序二維碼并保存到本地功能示例
這篇文章主要介紹了node實(shí)現(xiàn)生成帶參數(shù)的小程序二維碼并保存到本地功能,涉及nodejs模塊引用、接口調(diào)用、編碼轉(zhuǎn)換、圖片生成等相關(guān)操作技巧,需要的朋友可以參考下2018-12-12

