2010-10-22 43 views
5

我正在尝试使用mysqldump导出需要使用不同数据库名称导入的数据库。看看由mysqldump生成的SQL,看起来触发器是唯一的对象名称,它与源数据库名称完全合格,从而阻碍了我的需要。有没有办法指示mysqldump不能完全限定任何对象名称,包括触发器?mysqldump完全符合数据库名称触发条件

回答

2

我有同样的问题,我找到了解决方案。我使用MySQL Workbench来设计我的数据库,并在那里创建了一些触发器。他们都使用语法CREATE TRIGGER trigger_name除了一个:CREATE TRIGGER dbname.trigger_name(这只是我的错误)。 Mysqldump输出以相同的方式包含所有触发器:只有一个具有数据库名称。

Mysqldump使用您的原始CREATE TRIGGER说明,你可以通过SHOW CREATE TRIGGER看到。如果你有一个用数据库名称定义的触发器,只需用一个不带dbname的触发器替换它(删除并创建)即可。

+0

我不会验证这一点(从我需要它已经两年多了,在可预见的将来我不需要它),但这听起来像是一个合理而实用的解决方案,所以我正在标记它作为答案!感谢分享。 – 2013-02-19 14:54:39

+0

哈,我看@emre实际上在一年前提出了这个解决方案,并且我把他击倒了。无论如何,他是一个怀疑,你的坚持,所以我会给你留下明显的答案。当然,如果有任何证据相反,我们会考虑那个。现在,我认为你的建议很有可能会帮助其他人。 – 2013-02-19 14:59:22

+0

好吧,我刚测试过它,因为我有同样的问题。如果这很重要,我的MySQL服务器版本是5.5.29-0ubuntu0.12.04.1 – ducin 2013-02-20 07:41:55

1

最大的可能是您在创建触发器添加数据库名称。尝试更新您的触发器,而不使用数据库名称。

+0

它已经有一段时间,因为我不得不解决这个问题,但我敢肯定,这个问题不是由于使用完全限定的数据库名称创建触发器:mysqldump的将生成的数据库名称触发器创建脚本无论我如何创建它们,都是完全合格的。 – 2011-04-20 15:45:18

0

不是一个理想的解决方案,但通过抽下面的输出上的触发已经摆脱了数据库名称的我。

mysqldump ... opts ... | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/'