生成一个 mysql 进程以使用节点导入数据库
Spawn a mysql process to import a database using node
我正在尝试编写一个节点脚本来自动导入一个 .sql 文件。我想我误解了将参数传递给 'spawn' 的方式。这是我拥有的:
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"'
我知道我一定是在指定参数时做错了,但如何解决呢?关于生成子进程的节点文档让我感到困惑。感谢您的帮助!
谢谢保罗 F!您的解决方案有效。我从 spawn 中删除了最后一个参数并添加到我的代码中:
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)
});
我正在尝试编写一个节点脚本来自动导入一个 .sql 文件。我想我误解了将参数传递给 'spawn' 的方式。这是我拥有的:
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"'
我知道我一定是在指定参数时做错了,但如何解决呢?关于生成子进程的节点文档让我感到困惑。感谢您的帮助!
谢谢保罗 F!您的解决方案有效。我从 spawn 中删除了最后一个参数并添加到我的代码中:
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)
});