mysqldump触发器分隔符语法

mysqldump触发器分隔符语法,mysql,triggers,mysqldump,delimiter,Mysql,Triggers,Mysqldump,Delimiter,我使用mysqldump进行备份,其中包括触发器,在执行导入时会出现以下分隔符语法错误: 第1059行出错:分隔符后面必须跟一个分隔符字符或字符串 第1060行出现错误1064(42000):SQL语法有错误;在第5行的“``附近使用正确的语法,检查与MySQL服务器版本对应的手册 第1059行设置触发器语句前的分隔符:delimiter 第1060行是:/!50003创建/!50017定义者=用户@%/*!50003触发器数据库t\u审核客户端 触发器是用分隔符$$放入的。但是,备份时,生成的

我使用mysqldump进行备份,其中包括触发器,在执行导入时会出现以下分隔符语法错误:

第1059行出错:分隔符后面必须跟一个
分隔符
字符或字符串

第1060行出现错误1064(42000):SQL语法有错误;在第5行的“``附近使用正确的语法,检查与MySQL服务器版本对应的手册

第1059行设置触发器语句前的分隔符:delimiter

第1060行是:/!50003创建/!50017定义者=
用户
@
%
/*!50003触发器
数据库
t\u审核客户端

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


感谢

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_用户取出并替换的东西,所有的50003/50017垃圾都消失了,它可以正常工作。哈利路亚

注意:要在OSX上实现这一点,您不能使用内置版本的sed。您可以
brew安装gnu sed
,然后打开一个新的终端窗口,执行上述命令,除了使用
gsed
而不是
sed

然后运行SQL当然最简单的事情就是进入mysql终端,
如果需要,使用
db,然后
SOURCE fileName.SQL
。。。为了巨大的利润


注意:许多博萨人为了给我们带来这些信息而死亡。

在我的例子中,导致问题的触发器没有
BEGIN
END
语句。因此,我应用了相应的
DROP TRIGGER
CREATE TRIGGER
,之后,我再次进行了备份,后者恢复正常。i、 e:

DROP TRIGGER `incorrect_trg1`;
DELIMITER ;;
CREATE DEFINER = `root`@`localhost` TRIGGER `incorrect_trg1` BEFORE INSERT ON `table1` FOR EACH ROW 
BEGIN
SET NEW.col = DATE_FORMAT(NEW.col,'%Y%m');
END;;

垃圾场是怎么被拿走的?Was
DELIMITER在命令中显式指定?转储是使用--trigger标志从命令行获取的。在转储sql文件中,所有分隔符命令都是delimiter;;我想这是故意的触发器被注释掉,以支持早期版本(3.x,4.x)中的转储。是的,但问题在于分隔符,因为当我手动将分隔符语句更改为使用$$时,触发器已成功导入。我想知道是否有办法让mysql输出输入触发器时使用的分隔符。