Lorsque j'exécute mysqldump, j'obtiens une erreur:
mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES
Cela a du sens car foobar
est une machine héritée qui n'existe plus.
Comment changer le définisseur de toutes mes tables en 'root' @ 'localhost'?
Ce que je pense, c'est que la base de données que vous essayez de vider contient des procédures/méthodes qui ont été définies par un utilisateur alors qu'il était connecté en tant que root @ 'foobar'.
Maintenant, la solution est que vous devez remplacer le définisseur pour ces procédures/méthodes
alors vous pouvez générer le vidage sans l'erreur.
vous pouvez faire ça comme ..
UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar'
Soyez prudent, car cela changera tous les définisseurs pour toutes les bases de données.
Essayez-le ....!
MISE À JOUR le 9 février 2012
Comme j'ai vu le lien donné par @gbn qui est une réponse donnée par @Rolando qui peut aussi être le cas. Veuillez visiter le lien
EDIT par @RolandoMySQLDBA 2011-12-16 11:20 EDT
Bien que risquée, cette réponse est bonne. Juste pour clarifier: vous pouvez spécifier la base de données dans votre requête comme ceci:
UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@foobar' AND db='whateverdbyouwant';
Plus facile à utiliser le --single-transaction
commutateur:
mysqldump --single-transaction -u username -p db > db.sql
La solution la plus rapide serait simplement de recréer le définisseur pour qu'il existe, tant qu'il ne crée aucun conflit avec les utilisateurs existants.
CREATE USER 'root'@'foobar';
Exportez toutes les vues de la base de données <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
ou:
mysql -BNe "SELECT TABLE_NAME FROM VIEWS WHERE TABLE_SCHEMA = '<DB>'" \
information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql
Éditer views.sql
et les recréer:
cat views.sql | mysql <DB>
Spécifiez -u
et -p
change si nécessaire.