You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,做以下修改:

    1. 在脚本最开头添加:DELIMITER //
    2. 找到每个触发器创建语句的结尾,把原来的;替换成//
    3. 在脚本最后添加:DELIMITER ;
      这样修改后,不管用命令行还是支持分隔符设置的GUI工具,都能正确执行脚本,不会再出现同步错误。

内容的提问来源于stack exchange,提问作者Hippyjim

火山引擎 最新活动