使用触发器转储mysql5.5架构并恢复为具有不同名称的新架构

时间:2011-04-15 17:19:11

标签: mysql mysqldump database-restore

我遇到的问题是触发器定义在其中具有硬编码的原始模式名称,例如:

TRIGGER `sales`.`tender_delete_trigger`
AFTER DELETE ON `sales`.`tender`
FOR EACH ROW
......

因此,如果使用mysqldump备份'sales'模式,然后尝试恢复到同一服务器上新创建的名为'sales_test'的模式,我会收到一条错误,指出不允许在多个触发器上行事件

我目前的解决方案是使用转储文件中的新架构名称“sales_test”手动替换旧架构名称“sales”。这有效,但是有一个更简单,更乏味的解决方案吗?

1 个答案:

答案 0 :(得分:1)

不要手动操作。既然你没有指定O / S,我会假设Linux,尽管其他大多数都是等价的:

vim -c'%s/`sales`/`new_schema_name`/g' -c':x' dumpfile.sql

另一种可能性是从触发器中省略模式名称。假设当前架构。


(编辑)

1)同意。但重命名架构是一个奇怪的问题。 2)这肯定是一种风险,因为可能存在类似命名的表和变量。对模式的修改可能会有所帮助:

  %s/\([^.]\)`sales`\([.]\)/\1`new_schema_name`\2/g
除非存在插入的空格,否则

会坚持图示名称被适当放置。