Rumah >pangkalan data >tutorial mysql >Mengapakah pangkalan data MySQL saya dibuang menggunakan Node.js menghasilkan fail kosong walaupun fail berjaya disimpan?

Mengapakah pangkalan data MySQL saya dibuang menggunakan Node.js menghasilkan fail kosong walaupun fail berjaya disimpan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-04 03:41:02820semak imbas

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

Melambakkan Pangkalan Data MySQL Menggunakan Node.js

Masalah

Percubaan untuk mencipta skrip cron untuk membuang pangkalan data MySQL menghasilkan fail kosong walaupun berjaya menyimpan fail. Pencetakan log juga menghasilkan rentetan kosong.

Punca

Isu ini berpunca daripada beberapa masalah dalam kod yang disediakan:

  1. Kekurangan sambungan pangkalan data awal melalui connection.connect ()
  2. Kod panggil balik yang diletakkan di luar sambungan.connect() panggil balik, menghalang pelaksanaan
  3. Kemusnahan sambungan pramatang sebelum panggilan SQL selesai
  4. Percubaan untuk menyimpan fail sandaran dalam panggilan balik yang salah (sebelum populasi data)

Penyelesaian

Kod berikut membetulkan isu ini dan menyediakan fungsi penyelesaian:

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

Nota Tambahan

Pertimbangkan untuk menggunakan:

  • diri dan bukannya saya untuk kejelasan
  • Angka untuk gelung di atas untuk .. . dalam sintaks
  • Format panggilan balik yang konsisten (err, barang)
  • Janji untuk pengendalian ralat yang lebih baik dan pengurusan sarang panggil balik

Atas ialah kandungan terperinci Mengapakah pangkalan data MySQL saya dibuang menggunakan Node.js menghasilkan fail kosong walaupun fail berjaya disimpan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn