生成一个mysql进程,使用node导入数据库



我正在尝试编写一个节点脚本来自动导入.sql文件。我想我误解了将争论传递给"产卵"的方式。这是我的:

var spawn    = require('child_process').spawn;
var mysqlimport = spawn('/usr/local/bin/mysql', [
    '-u' + database.user,
    '-p' + database.password,
    '-h' + database.address,
    '--default-character-set=utf8',
    '--comments',
    '<"' + fileName + '"'
]);
mysqlimport
        .stdout
        .pipe(logFile)
        .on('data', function(data) {
           console.log(data); 
        })
        .on('finish', function() {
            console.log('finished')
        })
        .on('error', function(err) {
            console.log(err)
        });
mysqlimport.stderr.on('data', function(data) {
   console.log('stdout: ' + data);
});
mysqlimport.on('close', function(code) {
   console.log('closing code: ' + code);
});

我得到错误

stdout: ERROR 1049 (42000): Unknown database '<"/users/user/dumps/sqlfile.sql"

如果在导出时不使用-B标志,并指定数据库名称,则会更改

'<"' + fileName + '"'

databaseName + ' <"' + fileName + '"'

我得到了另一个错误:

stdout: ERROR 1102 (42000): Incorrect database name ' theDatabase < "/users/user/dumps/sqlfile.sql"'

我知道我在指定论点时一定做错了什么,但如何解决呢?关于生成子进程的节点文档让我感到困惑。感谢您的帮助!

感谢Paul F!你的解决方案奏效了。我从派生中删除了最后一个参数,并添加到我的代码中:

mysqlimport.stdin.write( '\. /Users/user/dumps/' + fileName );
mysqlimport.stdin.end();

所以总的来说:

var mysqlimport = spawn('/usr/local/bin/mysql', [
    '-u' + database.user,
    '-p' + database.password,
    '-h' + database.address,
    '--default-character-set=utf8',
    '--comments'
]);
mysqlimport.stdin.write( '\. /Users/user/dumps/' + fileName );
mysqlimport.stdin.end();
mysqlimport
        .stdout
        .pipe(logFile)
        .on('data', function(data) {
           console.log(data); 
        })
        .on('finish', function() {
            console.log('finished')
        })
        .on('error', function(err) {
            console.log(err)
        });

相关内容

  • 没有找到相关文章

最新更新