2010-10-22 7 views
5

Ich versuche mit mysqldump eine Datenbank zu exportieren, die mit einem anderen Datenbanknamen importiert werden muss. Wenn man sich das von mysqldump generierte SQL anschaut, scheint es, dass Trigger die einzigen Objektnamen sind, die mit dem Namen der Quelldatenbank vollständig qualifiziert sind, so dass meine Bedürfnisse nicht berücksichtigt werden. Gibt es überhaupt einen Hinweis darauf, dass mysqldump Objektnamen einschließlich Triggern nicht vollständig qualifiziert?mysqldump Qualifiziert vollständig Trigger mit Datenbankname

Antwort

2

Ich hatte das gleiche Problem und ich fand die Lösung. Ich habe MySQL Workbench verwendet, um meine Datenbank zu entwerfen, und ich habe dort einige Trigger erstellt. Alle verwendeten die Syntax CREATE TRIGGER trigger_name außer einem: CREATE TRIGGER dbname.trigger_name (es war nur mein Fehler). Die Mysqldump-Ausgabe enthielt alle Trigger auf die gleiche Weise: nur einer hatte einen Datenbanknamen.

Mysqldump verwendet Ihre ursprünglichen CREATE TRIGGER Anweisungen, die Sie über SHOW CREATE TRIGGER sehen können. Wenn Sie einen Trigger mit einem Datenbanknamen definiert haben, ersetzen Sie ihn einfach (drop and create) durch einen ohne dbname.

+0

Ich werde das nicht überprüfen (es ist über zwei Jahre her, seit ich es gebraucht habe, und ich werde es in absehbarer Zeit nicht brauchen), aber das klingt nach einer plausiblen und praktischen Lösung, also markiere ich es als Antwort! Danke für das Teilen. –

+0

Ha, ich sehe, dass @emre diese Lösung vor über einem Jahr vorgeschlagen hat und ich ihn abgeschossen habe. Nichtsdestoweniger war sein Verdacht, und deins ist ein Beharren, also werde ich Sie mit der markierten Antwort verlassen. Wenn irgendjemand anderes das Gegenteil findet, werden wir das dann berücksichtigen. Im Moment denke ich, dass es eine gute Chance gibt, dass Ihr Rat anderen hilft. –

+0

Nun, ich habe es gerade getestet, weil ich das gleiche Problem hatte. Wenn es wichtig ist, ist meine MySQL Server Version 5.5.29-0ubuntu0.12.04.1 – ducin

1

Wahrscheinlich fügen Sie beim Erstellen des Triggers den Datenbanknamen hinzu. Versuchen Sie, Ihren Trigger ohne den Datenbanknamen zu aktualisieren.

+0

Es ist eine Weile her, seit ich damit zu tun hatte, aber ich bin mir ziemlich sicher, dass das Problem nicht auf die Erstellung der Trigger mit dem voll qualifizierten Datenbanknamen zurückzuführen war: mysqldump würde das Triggererstellungsscript mit dem Datenbanknamen generieren vollqualifiziert, unabhängig davon, wie ich sie erstellt habe. –

0

Keine ideale Lösung, aber Pumpen der Ausgabe durch die folgenden hat den Datenbanknamen auf den Auslösern für mich losgeworden.

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