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'?
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';
Einfachere Verwendung des --single-transaction
Schalter:
mysqldump --single-transaction -u username -p db > db.sql
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';
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.