gpt4 book ai didi

triggers - mysqldump 触发器分隔符语法

转载 作者:行者123 更新时间:2023-11-29 03:06:16 25 4
gpt4 key购买 nike

我正在使用 mysqldump 进行备份,其中包括触发器,并且在进行导入时会导致以下定界符语法错误:

ERROR at line 1059: DELIMITER must be followed by a delimiter character or string

ERROR 1064 (42000) at line 1060: You have an error with your SQL syntax; check the manual that corresponds to your MySQL server version from the right syntax to use near `` at line 5

1059行设置触发语句前的分隔符:DELIMITER ;;

1060行是:/!50003 CREATE//!50017 DEFINER=user@%//*!50003 触发 数据库t_auditclients

触发器是用分隔符 $$ 输入的。但是,备份时生成的 sql 文件有 DELIMITER ;;而不是 $$。我已经手动更改了 DELIMITER ;;到 mysqldump 文件中的 DELIMITER $$ 并使用 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_USER 并且所有 50003/50017 废话都消失了并且它可以正常工作。哈利路亚!

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

然后运行 ​​SQL 当然,最简单的事情就是进入 mysql 终端,USE 如果需要的话,一个数据库,然后 SOURCE fileName.sql ...利润丰厚。

注意:许多 Bothans 为我们提供此信息而死。

关于triggers - mysqldump 触发器分隔符语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14713514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com