尽管文件保存成功,但为什么使用 Node.js 的 MySQL 数据库转储会导致空文件?

Mary-Kate Olsen
发布: 2024-11-04 03:41:02
原创
790 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板