不包含触发器的Mysqldump

12

我正在使用mysqldump分享数据库转储,但是我遇到了触发器的问题。该命令没有添加“drop”或“replace”语句与触发器一起使用,导致已经添加了具有相同触发器名称的先前转储的人出现错误:

ERROR 1359 (HY000) at line 1420: Trigger already exists

我在论坛上看到人们说这是mysql的一个缺失功能,但所有帖子都很旧,我想知道现在是否有办法做到。

我知道有一种方法可以分别转储模式和数据,但我想保持单个转储以便共享。


1
一种方法是使用犀牛方法:手动编辑转储,找到CREATE TRIGGER语法并添加IF EXISTS。 - Mihai
3个回答

29

在 MySQL 数据库备份时,建议使用 --skip-triggers 参数来跳过触发器。


0

你说得对,我正在使用mysql 5.7,这个选项似乎定义了我需要的内容,但是当我使用它时仍然出现相同的错误。 - Jean-Loup Becquet
@Jean-LoupBecquet,这不符合逻辑。但是,如果您之前在不同的表上使用了相同的触发器名称,那么可能可以解释清楚。在单个模式中,触发器名称必须在所有表之间唯一--也就是说,在表t1和t2上不能有相同名称的触发器,并且mysqldump无法预测目标上可能存在什么。 - Michael - sqlbot

0
例如,使用--skip-triggers,您可以将apple数据库的表的架构和数据导出到backup.sql,而不包括其触发器,如下所示。默认情况下,触发器会通过隐式--triggers导出,而我的回答解释了如何完美地导出数据库。
mysqldump -u john -p --skip-triggers apple > backup.sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接