Сброс схемы mysql5.5 с помощью триггеров и восстановление новой схемы с другим именем

Моя проблема заключается в том, что в определениях триггеров жестко закодировано исходное имя схемы, например:

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

Поэтому, если сделать резервную копию схемы «продажи» с помощью mysqldump, а затем попытаться восстановить вновь созданную схему с именем «продажи_тест» на том же сервере, я получаю сообщение об ошибке, указывающее, что что-то в строках нескольких триггеров не разрешено для одного и того же события.

Мое текущее решение состоит в том, чтобы вручную заменить старое имя схемы «продажи» на новое имя схемы «продажи_тест» в файле дампа. Это работает, но есть ли более простое и менее утомительное решение?


person David    schedule 15.04.2011    source источник


Ответы (1)


Не делайте этого вручную. Поскольку вы не указываете операционную систему, я предполагаю Linux, хотя для большинства других есть эквиваленты:

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

Другая возможность — не указывать имя схемы в триггерах. Предполагается текущая схема.


(редактировать)

1) Согласен. Но переименование схемы — странная проблема с самого начала. 2) Это, безусловно, риск, так как могут быть таблицы и переменные с одинаковыми именами. Модификация шаблона может помочь:

  %s/\([^.]\)`sales`\([.]\)/\1`new_schema_name`\2/g

будет настаивать на том, чтобы имя схемы было размещено надлежащим образом, если нет промежуточных пробелов.

person wallyk    schedule 15.04.2011
comment
Я как бы надеялся, что есть способ опустить имя схемы в исходном файле дампа, возможно, с помощью параметра mysqldump или вообще другой утилиты дампа. Моя единственная проблема с опцией поиска и замены заключается в том, что 1) это «лечение», а не «профилактика» и 2) нет ли опасности (по общему признанию, очень маловероятной) замены чего-то, чего не должно быть. Что, если строка sales где-то существует как данные? Может быть, я просто слишком перфекционист? - person David; 16.04.2011
comment
С тех пор я понял, что переименование схемы было неправильным путем. Как вы сказали, странная проблема! Теперь у меня есть отдельный тестовый сервер, поэтому я могу импортировать моментальный снимок рабочей схемы прямо на тестовый сервер без изменений. Теперь это кажется очевидным. Ты живи и учись... - person David; 26.04.2011