Heim  >  Artikel  >  Datenbank  >  Warum führt mein MySQL-Datenbank-Dump mit Node.js trotz erfolgreicher Dateispeicherung zu einer leeren Datei?

Warum führt mein MySQL-Datenbank-Dump mit Node.js trotz erfolgreicher Dateispeicherung zu einer leeren Datei?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-04 03:41:02794Durchsuche

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

Dumping einer MySQL-Datenbank mit Node.js

Problem

Versuche, ein Cron-Skript zum Dumpen einer MySQL-Datenbank zu erstellen, führen trotzdem zu einer leeren Datei erfolgreiche Dateispeicherung. Beim Drucken des Protokolls wird auch eine leere Zeichenfolge ausgegeben.

Ursache

Das Problem ist auf mehrere Probleme im bereitgestellten Code zurückzuführen:

  1. Fehlende anfängliche Datenbankverbindung über „connection.connect“. ()
  2. Rückrufcode wird außerhalb des Connection.connect()-Rückrufs platziert und verhindert die Ausführung
  3. Vorzeitige Verbindungszerstörung, bevor SQL-Aufrufe abgeschlossen sind
  4. Versuch, die Sicherungsdatei im zu speichern falscher Rückruf (vor der Datenauffüllung)

Lösung

Der folgende Code behebt diese Probleme und bietet eine funktionierende Lösung:

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();

Zusätzliche Hinweise

Erwägen Sie die Verwendung von:

  • self anstelle von me zur Verdeutlichung
  • Numerische for-Schleifen über for ... in der Syntax
  • Konsistentes Rückrufformat (ähm, Zeug)
  • Versprechen einer verbesserten Fehlerbehandlung und Rückrufverschachtelungsverwaltung

Das obige ist der detaillierte Inhalt vonWarum führt mein MySQL-Datenbank-Dump mit Node.js trotz erfolgreicher Dateispeicherung zu einer leeren Datei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn