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?

137voto

Abhay Punkte 6435

Ich glaube nicht, dass es eine Möglichkeit gibt, das Hinzufügen von DEFINER s auf die Müllkippe. Es gibt jedoch Möglichkeiten, sie nach der Erstellung der Speicherauszugsdatei zu entfernen.

  1. Öffnen Sie die Dump-Datei in einem Texteditor und ersetzen Sie alle Vorkommen von DEFINER=root@localhost mit einer leeren Zeichenkette ""

  2. Bearbeiten Sie den Dump (oder leiten Sie die Ausgabe weiter) mit perl :

    perl -p -i.bak -e "s/DEFINER=\`\w.*\`@\`\d[0-3].*[0-3]\`//g" mydatabase.sql
  3. Leiten Sie die Ausgabe durch sed :

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

109voto

Ricardo Martins Punkte 5208

Sie können mit SED entfernen

sed -i 's/DEFINER=[^*]*\*/\*/g' mydump.sql

Unter MacOS:

sed -i '' 's/DEFINER=[^*]*\*/\*/g' mydump.sql

84voto

maxhb Punkte 8265

Seit mysql Version 5.7.8 können Sie die --skip-definer Option mit mysqlpump, z.B.:

mysqlpump --skip-definer -h localhost -u user -p yourdatabase

Siehe aktualisiertes mysql-Handbuch unter http://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html#option_mysqlpump_skip-definer

28voto

Ich habe diese Ideen verwendet, um die DEFINER-Klausel aus meiner eigenen mysqldump-Ausgabe zu entfernen, aber ich habe einen einfacheren Ansatz gewählt:

Entfernen Sie einfach die ! vor dem Code und DEFINER, und der Rest des Kommentars wird ein normaler Kommentar.

Exemple :

/*!50017 DEFINER=`user`@`111.22.33.44`*/

hilflos gemacht wird, so wenig wie dies zu tun ..

/* 50017 DEFINER=`user`@`111.22.33.44`*/

Die einfachste Regexp ist jedoch, das ! und die Zahlen zu entfernen

mysqldump | /usr/bin/perl -pe 's/\!\d+ DEFINER/DEFINER/' > dumpfile.sql

Das beseitigt !#### DEFINER und ersetzt es durch DEFINER ... Sie können DEFINER auch entfernen, das spielt keine Rolle - sobald das "!" weg ist

21voto

Jonathan Punkte 17039

Wie von anderen empfohlen, ist hier ein Beispiel dafür, wie der DEFINER aus dem Dump entfernt werden kann, nachdem der Dump beendet ist:

mysqldump -u user --password='password' -h localhost database | grep -v "50013 DEFINER" > dump.sql

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