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
Lepaskan: 2024-11-04 03:41:02
asal
821 orang telah melayarinya

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan