儘管檔案保存成功,為什麼使用 Node.js 的 MySQL 資料庫轉儲會導致空檔?

Mary-Kate Olsen
發布: 2024-11-04 03:41:02
原創
794 人瀏覽過

Why is my MySQL database dump using Node.js resulting in an empty file despite successful file saving?

使用 Node.js 轉儲 MySQL 資料庫

問題

嘗試建立 cron 腳本來轉儲 MySQL 資料庫會導致空檔案保存成功。日誌列印也會產生一個空字串。

原因

這個問題源自於所提供程式碼中的幾個問題:

  1. 缺乏透過connection.connect的初始資料庫連線()
  2. 回呼程式碼放置在connection.connect()回呼之外,阻止執行
  3. 在SQL調用完成之前過早破壞連接
  4. 嘗試將備份檔案保存在錯誤的回調(資料填充之前)

解決方案

以下程式碼修正了這些問題並提供了一個有效的解決方案:

var mysql_backup = function() {
    this.backup = '';
    this.mysql = require('mysql');

    this.init = function() {
        this.connection = this.mysql.createConnection({
            user: 'root',
            password: 'root',
            database: 'test'
        });

        // Connect to the database
        this.connection.connect(function(err) {
            if (err) console.log(err);
            db.get_tables(function() {});
        });
    };

    this.query = function(sql, callback) {
        this.connection.query(sql, function (error, results, fields) {
            if (error) {
                throw error;
            }
            if (results.length  > 0) {
                callback(results);
            }
        });
    };

    this.get_tables = function(callback){
        var counter = 0;
        var me = this;
        this.query('SHOW TABLES', function(tables) {
            for (table in tables) {
                counter++;
                me.query('SHOW CREATE TABLE ' + tables[table].Tables_in_test, function(r){
                    for (t in r) {
                        me.backup += "DROP TABLE " + r[t].Table + "\n\n";
                        me.backup += r[t]["Create Table"] + "\n\n";
                    }
                    counter--;
                    if (counter === 0) {
                        me.save_backup();
                        me.connection.destroy();
                    }
                });
            }
        });
    };

    this.save_backup = function() {
        var fs = require('fs');
        fs.writeFile("./backup_test.txt", this.backup, function(err) {
            if(err) {
                console.log(err);
            } else {
                console.log("The file was saved!");
            }
        });
    }

};

var db = new mysql_backup;
db.init();
登入後複製

附加說明

    附加說明
  • 附加說明
  • 附加說明
附加說明為了清楚起見,請考慮使用:self 而不是我語法中的數字for 循環for ...一致的回調格式(錯誤,東西) 改進錯誤處理和回調嵌套管理的承諾

以上是儘管檔案保存成功,為什麼使用 Node.js 的 MySQL 資料庫轉儲會導致空檔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板