首页 文章

mysqldump触发分隔符语法

提问于
浏览
1

我正在使用mysqldump进行包含触发器的备份,并且在执行导入时会产生以下分隔符语法错误:

第1059行的错误:DELIMITER后面必须跟一个分隔符或字符串ERROR 1064(42000)第1060行:您的SQL语法出错了;从正确的语法查看与MySQL服务器版本对应的手册,在第5行的``附近使用

第1059行在触发器声明之前设置分隔符:DELIMITER ;;

1060行是:/!50003 CREATE / /!50017 DEFINER = user @ % / / *!50003 TRIGGER database . t_auditclients

使用DELIMITER $$输入触发器 . 但是,备份时生成的sql文件有DELIMITER ;;而不是$$ . 我手动更改了DELIMITER ;;在mysqldump文件中使用DELIMITER $$并使用mysqlworkbench成功导入 . 有没有办法让mysqldump输出用于创建触发器的原始分隔符?

谢谢

1 回答

  • 0

    Linux上的解决方案是运行以下命令:

    sed -i -- 's/^..!50003\sCREATE.....!50017\sDEFINER=.root...[^`]*`.....!50003\s\([^;]*\)/CREATE DEFINER=CURRENT_USER \1/g;s/^\s*\([^\*]*;\{0,1\}\)\s\{0,1\}\*\/;;$/\1;;/g' fileName.sql
    

    这将创建一个新文件,其中root @ localhost或其他任何内容已被取出并由CREATE DEFINER = CURRENT_USER替换,并且所有50003/50017废话都消失了它只是起作用 . 哈利路亚!

    注意:要使其在OS X上运行,您不能使用sed的内置版本 . 你可以 brew install gnu-sed ,然后打开一个新的终端窗口,并执行上面的命令,除了使用 gsed 而不是 sed .

    然后运行SQL当然最简单的事情就是进入mysql终端,如果需要的话, USE 一个db,然后 SOURCE fileName.sql ...获得巨大的利润 .

    注意:许多Bothans死于向我们提供此信息 .

相关问题