MySQL导出含触发器的数据库时出现“Commands out of sync”错误
解决MySQL触发器导入时"commands out of sync"错误的方法
我之前也碰到过这个烦人的问题,特别是在用mysqldump导出触发器后导入时出现commands out of sync错误,下面几个不用逐个创建触发器的解决办法,亲测有效:
用MySQL命令行客户端直接导入
这个是最可靠的方式,因为GUI工具(比如Navicat、phpMyAdmin)经常对触发器脚本里的分隔符切换和复合语句支持不好。直接在终端执行:mysql -u 你的用户名 -p 目标数据库名 < triggers.sql输入密码后,命令行客户端会正确处理脚本里的
DELIMITER切换和/*!50003 */这类版本兼容语句,不会出现命令同步错误。调整mysqldump导出参数,重新生成触发器脚本
你之前用了--skip-opt参数,这个参数会禁用mysqldump的很多默认优化设置,其中就包括对触发器导出时的分隔符自动处理。建议去掉这个参数,重新导出:mysqldump --routines --no-create-info --no-data --no-create-db 你的数据库名 > triggers.sql新生成的脚本会自动添加正确的
DELIMITER切换语句,导入时就能顺利执行所有触发器创建命令。手动修正现有触发器脚本的分隔符
如果不想重新导出,可以打开现有的triggers.sql,做以下修改:- 在脚本最开头添加:
DELIMITER // - 找到每个触发器创建语句的结尾,把原来的
;替换成// - 在脚本最后添加:
DELIMITER ;
这样修改后,不管用命令行还是支持分隔符设置的GUI工具,都能正确执行脚本,不会再出现同步错误。
- 在脚本最开头添加:
内容的提问来源于stack exchange,提问作者Hippyjim




