2010-10-22 1 views
5

Я пытаюсь использовать mysqldump для экспорта базы данных, которая должна быть импортирована с использованием другого имени базы данных. Глядя на SQL, сгенерированный mysqldump, кажется, что триггеры - это единственные имена объектов, которые полностью соответствуют имени базы данных источника, что лишает мои потребности. Есть ли в любом случае для того, чтобы направить mysqldump не полностью-квалифицировать любые имена объектов, включая триггеры?mysqldump Полностью квалифицирует триггеры с именем базы данных

ответ

2

У меня была та же проблема, и я нашел решение. Я использовал MySQL Workbench для разработки моей базы данных, и я создал там триггеры. Все они использовали синтаксис CREATE TRIGGER trigger_name, за исключением одного: CREATE TRIGGER dbname.trigger_name (это была моя ошибка). Выход Mysqldump включал все триггеры таким же образом: только у одного было имя базы данных.

Mysqldump использует ваши оригинальные инструкции CREATE TRIGGER, которые вы можете видеть через SHOW CREATE TRIGGER. Если у вас есть триггер, определенный с именем базы данных, просто замените его (отбросьте и создайте) на один без dbname.

+0

Я не буду проверять это (прошло уже два года с тех пор, как я был нужен, и мне это не понадобится в обозримом будущем), но это звучит как правдоподобное и практичное решение, поэтому я отмечаю это как ответ! Спасибо, что поделился. –

+0

Ха, я вижу, что действительно предлагал это решение более года назад, и я застрелил его. Тем не менее, он был подозрительным, а ваш - настойчивым, поэтому я оставлю вас с заметным ответом. Конечно, если кто-то найдет доказательства обратного, мы тогда это рассмотрим. На данный момент, я думаю, есть хороший шанс, что ваш совет поможет другим. –

+0

ну, я только что протестировал его, потому что у меня была такая же проблема. Если это важно, моя версия сервера MySQL - 5.5.29-0ubuntu0.12.04.1 – ducin

1

Скорее всего, вы добавляете имя базы данных при создании триггера. Попробуйте обновить триггер без имени базы данных.

+0

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

0

Не идеальное решение, но выкачивание выходного сигнала из следующего избавило меня от имени базы данных на триггере для меня.

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