it-swarm.com.de

Wie ändere ich den DEFINER einer ANSICHT in MySQL?

Wenn ich mysqldump ausführe, wird folgende Fehlermeldung angezeigt:

mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES

Dies ist sinnvoll, da foobar eine Legacy-Maschine ist, die nicht mehr existiert.

Wie ändere ich den Definierer aller meiner Tabellen in 'root' @ 'localhost'?

36
kfmfe04

Ich denke, dass die Datenbank, die Sie sichern möchten, Prozeduren/Methoden enthält, die von einem Benutzer definiert wurden, als er als root @ 'foobar' angemeldet war.

Die Lösung besteht nun darin, dass Sie die Definierer für diese Verfahren/Methoden ersetzen müssen

dann können Sie den Speicherauszug ohne den Fehler generieren.

sie können dies wie tun ..

 UPDATE `mysql`.`proc` p SET definer = '[email protected]' WHERE definer='[email protected]'

Seien Sie vorsichtig, da dadurch alle Definierer für alle Datenbanken geändert werden.

Versuch es....!

UPDATE am 9. Februar 2012

Wie ich gesehen habe, ist der Link von @gbn eine Antwort von @Rolando, die auch der Fall sein kann. Bitte besuchen Sie den Link

EDIT von @RolandoMySQLDBA 2011-12-16 11:20 EDT

Diese Antwort ist zwar riskant, aber gut. Zur Verdeutlichung: Sie können die Datenbank in Ihrer Abfrage folgendermaßen angeben:

 UPDATE `mysql`.`proc` p SET definer = '[email protected]' WHERE definer='[email protected]' AND db='whateverdbyouwant';
33
Abdul Manaf

Einfachere Verwendung des --single-transaction Schalter:

mysqldump --single-transaction -u username -p db > db.sql
36
rod

Die schnellste Lösung wäre, den Definierer neu zu erstellen, damit er existiert, solange keine Konflikte mit vorhandenen Benutzern entstehen.

CREATE USER 'root'@'foobar';

18
ColinM

Exportieren Sie alle Ansichten der Datenbank <DB>:

mysql -BNe "SELECT TABLE_NAME FROM TABLES WHERE TABLE_SCHEMA = '<DB>' AND TABLE_TYPE = 'VIEW'" \
    information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql

oder:

mysql -BNe "SELECT TABLE_NAME FROM VIEWS WHERE TABLE_SCHEMA = '<DB>'" \
    information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql

Bearbeiten views.sql und erstelle sie neu:

cat views.sql | mysql <DB>

Geben Sie -u und -p wechselt bei Bedarf.

5
x-yuri