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?

2voto

Ryan Shillington Punkte 19095

Ersetzen Sie alle Ihre Definer-Benutzer durch CURRENT_USER. In meinem gradle-Skript, das das Backup erstellt, sieht mein Ersetzungsskript wie folgt aus:

ant.replaceregexp(file: "$buildDir/sql/setupDB.sql", match: "`${project.ext.prod_db_username}`@`%`", replace: "CURRENT_USER", byline: true);

was eigentlich nur ein Anruf bei ANT ist. Dann müssen Sie sich nicht darum kümmern.

1voto

R.Canaro Punkte 11

Ich danke Ihnen allen für die Hinweise. Aus Faulheit habe ich ein Skript namens: "MYsqldump" :

DB=$1
HOST=$2
USER=$3
MYSQLDUMP='/usr/bin/mysqldump'
PARAMS="--complete-insert --disable-keys=0 --extended-insert=0 --routines=0 --skip-comments"
DAY=`date +%d`
MONTH=`date +%m`
YEAR=`date +%Y`
FILE=$DB.$DAY-$MONTH-$YEAR.sql

    if (( $# < 3 )) ; then
        echo ""
        echo "usage: MYsqldump <db> <host> <user>"
        echo ""
        exit 1
    fi

    $MYSQLDUMP -h $HOST -u $USER -p  $PARAMS $DB | grep -v '/*!50013 DEFINER' > $FILE

1voto

impactaweb Punkte 11

Für etwas wie:

DELIMITER ;;
CREATE DEFINER=\`mydb\`@\`localhost\` FUNCTION \`myfunction\`() RETURNS int(11)
begin
(...)
end ;;

Versuchen Sie dies:

mysqldump --force --routines --opt --user=myuser --databases mydb | sed -e 's/DEFINER=\`.\*\`@\`.\*\`\\ //g'

1voto

Artur Kędzior Punkte 3765

Die einzige Möglichkeit, wie ich es unter Windows zum Laufen bringen konnte:

Installieren Sie http://gnuwin32.sourceforge.net/ zu haben sed in der Befehlszeile und fügen Sie es dem Windows PATH: D:\programs\GetGnuWin32\bin ;

sed -i "s|DEFINER=`mydbuser`@`%%` SQL SECURITY DEFINER||g" "D:/prod_structure.sql"

sed -i "s|DEFINER=`mydbuser`@`%%`||g" "D:/prod_structure.sql"

mysqldump -P{port} -h{host} -u{user} -p{password} --routines --no-data --lock-tables=false database_prod > D:\prod_structure.sql

1voto

Lê Công Danh Punkte 11
  1. Öffnen Sie Ihre Datenbank mit einem beliebigen Editor, ich habe Notepad++ verwendet,

  2. alle Tests finden, die DEFINER=root@localhost und ersetzen sie durch nichts( "" ) IE. löschen.

Dann können Sie sie auf jeden beliebigen Host importieren.

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