ホームページ  >  記事  >  データベース  >  NodeでMySQLのスケジュールされたバックアップを実装する方法

NodeでMySQLのスケジュールされたバックアップを実装する方法

王林
王林転載
2023-06-02 22:58:05760ブラウズ

    まえがき

    しばらく前に、笑ったり泣いたりするようなことが起こりました。プロジェクトは 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 時にバックアップする#を意味します##、特定の時刻形式については、以下の図または公式ドキュメントを参照してください:

    NodeでMySQLのスケジュールされたバックアップを実装する方法バックアップ成功のコールバックで、

    Email を呼び出します。バックアップ コンテンツを

    EMAIL に送信する クラス。これが焦点ではない場合は、今は書きません。 最後に

    src/command/index.js

    ファイルに バックアップ メソッドを導入し、呼び出し :

    import { backupDb } from "./BackupDB";
    
    backupDb();
    pm2デプロイメント

    最初にグローバルにインストールする必要があります

    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 サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。