mysqldump полностью квалифицирует триггеры с именем базы данных - PullRequest
5 голосов
/ 23 октября 2010

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

Ответы [ 3 ]

3 голосов
/ 19 февраля 2013

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

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

1 голос
/ 26 марта 2011

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

0 голосов
/ 17 октября 2012

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

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