Mysql节点拒绝声音查询以复制数据库
下面是一个合理的查询Mysql节点拒绝声音查询以复制数据库,mysql,node.js,amazon-web-services,sequelize.js,Mysql,Node.js,Amazon Web Services,Sequelize.js,下面是一个合理的查询克隆一个数据库,如果在命令行中执行,它每次都能正常工作 Executing (default): mysqldump --column-statistics=0 -h ***.amazonaws.com -u *** -p*** MyDB1 --set
克隆一个数据库,如果在命令行中执行,它每次都能正常工作
Executing (default): mysqldump
--column-statistics=0
-h ***.amazonaws.com
-u ***
-p*** MyDB1
--set-gtid-purged=OFF
|
mysql -h ***.amazonaws.com
-u ***
-p*** MyDB2
NodeJS
let DBname = req.body.DBname;
var sql = `mysqldump --column-statistics=0 -h ${config.global.host} -u ${config.global.user} -p${config.global.password} ${config.global.root_db_name} --set-gtid-purged=OFF | mysql -h ${config.global.host} -u ${config.global.user} -p${config.global.password} ${DBname} `
db.sequelize.query(sql)
.then( ()=> {
console.log(`${config.global.root_db_name} copied to-> ${DBname}`)
res.send('success')
}).catch( err=> {
console.log(`ERR: ${config.global.root_db_name} *FAILED* copied to-> ${DBname} ==> `+"\n\n" + err +"\n")
res.send('fail')
})
但是,当我将其嵌入我的NodeJS程序时,它会抛出错误:
SequelizeDatabaseError:您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解正确的语法
以前有人处理过这个问题吗?欢迎提供所有建议,谢谢。这个解决方案是Andrew在上面的一段话中提出的。我没有执行SQL命令
这就是有效的方法
const shell = require('shelljs')
...
var dump = `mysqldump --column-statistics=0 -h ${config.global.host} -u ${config.global.user} -p${config.global.password} ${config.global.root_db_name} --set-gtid-purged=OFF | mysql -h ${config.global.host} -u ${config.global.user} -p${config.global.password} ${DBname} `
if (shell.exec(dump).code !== 0) {
console.log(`ERR: ${config.global.root_db_name} *FAILED* copied to-> ${DBname} `)
res.send('fail')
} else {
console.log(`${config.global.root_db_name} copied to-> ${DBname}`)
res.send('success')
}
您能发布相关的Node.js代码片段吗?代码现在已发布请查看sequelize文档:。然后查看“mysqldump”命令行实用程序文档:。看起来您正在尝试使用一种只能执行SQL查询的方法。“mysqldump”不是一个查询,它是一个客户端实用程序,因此在本例中,您尝试执行的操作将不起作用。你可以试着用它来执行CLI命令:在你的实例上,但是idk你在什么样的环境中运行它。你完全正确-我真傻。谢谢你,我在下面发布了解决方案,它很有效。