しばらく前に、笑ったり泣いたりするようなことが起こりました。プロジェクトは Centos
サーバーにデプロイされています。再アップロード · Deployment
が必要なので、次のコマンドを実行しました:
rm -rf /*
Enter キーを押すと、ターミナルにコード行が点滅しているのがわかり、突然状況が変わったと感じました。単純ではありません。絶望して、ctrl c
でターミナルをすぐに中断しました。中断後、fpt
を介してファイルのアップロードを開始しましたが、ftp
にはファイルが存在しないことがわかりました。応答しました。パニックになりました。システムを破壊することはありません。
次にサーバーを 再起動
することにしましたが、うーん...、起動できませんでした。それは本当にシステムを破壊しました!上司に聞いたところ、snapshot
があれば Alibaba Cloud
を復元できるそうですが、スナップショットを保存していません。ただ、GG、プログラムがなくなっても問題はありませんが、データベースがなくなってしまったのです。
この時点で、データベースを定期的に
バックアップするには、スケジュールされたタスク
を作成する必要があることに気付きました。以前にカプセル化された 電子メール##と組み合わせてください。 # クラス、バックアップされたデータベースがメールボックスに送信されます。
nodejs を使用するため、ここでは
nodejs を使用してスケジュールされたタスクを記述します。
node-schedule 依存関係が必要で、バックアップ コマンドを実行するには
child_process 依存関係が必要です。
npm i node-schedule child_processコードの記述新しい
BackupDB.ts ファイルを
src/command ディレクトリに作成し、このファイルに依存関係を導入します。
import schedule from "node-schedule"; import { spawn } from "child_process"; import fs from "fs";メソッドを定義します
backupDb。すべてのバックアップ操作はこのメソッド内で行われます:
export const backupDb = () => {}メソッドで
timestamp を使用してバックアップを定義します
unique ファイル名と
Create stream:
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账户密码", "所要备份的数据库名" ]) }次回
backup コマンドを実行します:
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 を呼び出します。バックアップ コンテンツをEMAIL に送信する
クラス。これが焦点ではない場合は、今は書きません。 最後に
ファイルに バックアップ メソッドを導入し、
呼び出し :
import { backupDb } from "./BackupDB"; backupDb();
pm2デプロイメント
最初にグローバルにインストールする必要があります npm i pm2 -g
pm2 デプロイメント コマンドの形式は次のとおりです: pm2 start [nodejs ファイル] -- name [alias]:
pm2 start ./src/command/index.js --name backupDb
デプロイメントが完了したら、
pm2 ls コマンドを使用してそれを表示できます。 この時点で、データベースは毎日
午前 1 時
バックアップされ、電子メール
に送信されます。
以上がNodeでMySQLのスケジュールされたバックアップを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。