Maison > base de données > tutoriel mysql > Pourquoi le dump de ma base de données MySQL utilisant Node.js génère-t-il un fichier vide malgré un enregistrement réussi du fichier ?

Pourquoi le dump de ma base de données MySQL utilisant Node.js génère-t-il un fichier vide malgré un enregistrement réussi du fichier ?

Mary-Kate Olsen
Libérer: 2024-11-04 03:41:02
original
826 Les gens l'ont consulté

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

Dumping d'une base de données MySQL à l'aide de Node.js

Problème

Les tentatives de création d'un script cron pour vider une base de données MySQL aboutissent à un fichier vide malgré sauvegarde réussie du fichier. L'impression du journal génère également une chaîne vide.

Cause

Le problème provient de plusieurs problèmes dans le code fourni :

  1. Absence de connexion initiale à la base de données via connection.connect ()
  2. Code de rappel placé en dehors du rappel connection.connect(), empêchant l'exécution
  3. Destruction prématurée de la connexion avant la fin des appels SQL
  4. Tentative d'enregistrement du fichier de sauvegarde dans le mauvais rappel (avant le remplissage des données)

Solution

Le code suivant corrige ces problèmes et fournit une solution fonctionnelle :

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();
Copier après la connexion

Notes supplémentaires

Pensez à utiliser :

  • self à la place de moi pour plus de clarté
  • Numérique for boucle sur for ... dans la syntaxe
  • Format de rappel cohérent (euh, des trucs)
  • Promesses d'une gestion améliorée des erreurs et de l'imbrication des rappels

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal