161 Stimmen

DEFINER-Klausel aus MySQL-Dumps entfernen

Ich habe einen MySQL-Dump von einer meiner Datenbanken. Darin gibt es DEFINER-Klauseln, die wie folgt aussehen,

"DEFINER=`root`@`localhost`" 

Diese DEFINER-Klauseln befinden sich nämlich in meinen CREATE VIEW- und CREATE PROCEDURE-Anweisungen. Gibt es eine Möglichkeit, diese DEFINER-Klauseln aus meiner Dump-Datei zu entfernen?

15voto

Lajos Veres Punkte 13404

Wie bereits erwähnt, ist das Strippen des Definers mit einer beliebigen Art von regulärem Ausdruck nicht allzu komplex. Aber die anderen Beispiele haben die Definitionen der Ansicht für mich entfernt.

Dies ist der reguläre Ausdruck, der bei mir funktioniert hat:

sed -e 's/DEFINER=[^ ]* / /'

12voto

josephdpurcell Punkte 917

Für eine automatisierte Lösung könnten Sie sich Folgendes ansehen mysqlmigrate . Es ist eine Bash-Verpackung um mysqldump die es Ihnen ermöglicht, Datenbanken zu migrieren und die DEFINER-Anweisungen zu ignorieren. Beispiel:

$ mysqlmigrate -u root -p pass --ignore-definer from_db to_db

http://thesimplesynthesis.com/post/mysqlmigrate (ou ギットハブ )

Andernfalls ist ein Befehl, wie ihn Abhay vorschlägt, erforderlich:

$ mysqldump -u root -ppass the_db | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > the_db.sql

8voto

Jose Nobile Punkte 3143

Sie sollten die Antwort hier nachlesen: https://dba.stackexchange.com/questions/9249/how-do-i-change-the-definer-of-a-view-in-mysql/29079#29079

Der beste Weg, dieses Problem zu beheben, ist meiner Meinung nach nicht das Hinzufügen einer zusätzlichen Analyse von Zeichenketten mit sed oder grep oder anderen, sondern mysqldump ist in der Lage, einen guten Dump zu erzeugen, indem es --single-transaction

7voto

mohrt Punkte 444

Eine weitere Option unter OSX, um Definer in der Datei zu entfernen:

sed -i '' 's/DEFINER=`[^`][^`]*`@`[^`][^`]*`//g' file.sql

5voto

Paul Dixon Punkte 286600

Eine schnelle Möglichkeit, dies zu tun, besteht darin, die Ausgabe von mysqldump über sed zum Entfernen der DEFINER Anweisungen, die in bedingte Kommentare eingeschlossen sind. Ich verwende dies zum Entfernen von DEFINER de CREATE TRIGGER Anweisungen, aber Sie können die Versionsnummer des Bedingungskommentars in der Regex für Ihre Zwecke anpassen.

mysqldump -u user --password='password' -h localhost database | \
  sed 's/\/\*!50017 DEFINER=`.*`@`.*`\*\///'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X