2010-10-22 12 views
5

Sto tentando di utilizzare mysqldump per esportare un database che deve essere importato utilizzando un nome di database diverso. Guardando l'SQL generato da mysqldump, sembra che i trigger siano gli unici nomi di oggetti che sono pienamente qualificati con il nome del database di origine, sventando così le mie esigenze. Esiste comunque la possibilità di dirigere mysqldump per non qualificare in modo completo tutti i nomi degli oggetti compresi i trigger?mysqldump abilita completamente i trigger con il nome del database

risposta

2

Ho avuto lo stesso problema e ho trovato la soluzione. Stavo usando MySQL Workbench per progettare il mio database e lì ho creato alcuni trigger. Tutti hanno usato la sintassi CREATE TRIGGER trigger_name eccetto uno: CREATE TRIGGER dbname.trigger_name (era solo un mio errore). L'output di Mysqldump includeva tutti i trigger nello stesso modo: solo uno aveva il nome del database.

Mysqldump utilizza le istruzioni originali CREATE TRIGGER che è possibile vedere tramite SHOW CREATE TRIGGER. Se si dispone di un trigger definito con un nome di database, è sufficiente sostituirlo (rilascia e crea) con uno senza dbname.

+0

Non lo verificherò (sono passati più di due anni da quando ne avevo avuto bisogno, e non ne avrò bisogno nel prossimo futuro), ma suona come una soluzione plausibile e pratica, quindi sto marcando è la risposta! Grazie per la condivisione. –

+0

Ha, vedo @emre ha effettivamente suggerito questa soluzione più di un anno fa e l'ho abbattuto. In ogni caso, il suo era un sospetto e la tua è un'insistenza, quindi ti lascio con la risposta marcata. Certamente se qualcuno trova prove del contrario, lo considereremo allora. Per ora, penso ci siano buone possibilità che i tuoi consigli aiuteranno gli altri. –

+0

bene, l'ho appena testato, perché avevo lo stesso problema. Se è importante, la mia versione del server MySQL è 5.5.29-0ubuntu0.12.04.1 – ducin

1

Molto probabilmente si aggiunge il nome del database quando si crea il trigger. Prova ad aggiornare il trigger senza il nome del database.

+0

è da un po 'che non ho avuto a che fare con questo, ma sono abbastanza sicuro che il problema non era dovuto alla creazione dei trigger utilizzando il nome completo del database: mysqldump genererebbe lo script di creazione del trigger con il nome del database pienamente qualificato indipendentemente da come li ho creati. –

0

Non è una soluzione ideale, ma il pompaggio dell'output nel seguente modo ha eliminato il nome del database sui trigger per me.

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