Když spustím mysqldump, zobrazí se chyba:
mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES
To dává smysl, protože foobar
je starší počítač, který již neexistuje.
Jak mohu změnit definer všech mých tabulek na 'root' @ 'localhost'?
Myslím, že databáze, kterou se pokoušíte vypsat, obsahuje procedury/metody, které byly definovány uživatelem při přihlášení jako root @ 'foobar'.
Řešením je, že musíte nahradit procedury/metody definer
pak můžete vygenerovat výpis bez chyby.
můžete to udělat jako ..
UPDATE `mysql`.`proc` p SET definer = '[email protected]' WHERE definer='[email protected]'
Buďte opatrní, protože to změní všechny definice všech databází.
Zkus to....!
AKTUALIZACE 9. února 2012
Jak jsem viděl odkaz od @ gbn, který je odpovědí od @Rolando, může to být také případ. viz odkaz
ÚPRAVA @RolandoMySQLDBA 2011-12-16 11:20 EDT
I když je tato odpověď riskantní, je dobrá. Pro vyjasnění: V dotazu můžete specifikovat databázi takto:
UPDATE `mysql`.`proc` p SET definer = '[email protected]' WHERE definer='[email protected]' AND db='whateverdbyouwant';
Snadnější použití --single-transaction
přepínač:
mysqldump --single-transaction -u username -p db > db.sql
Nejrychlejším řešením by bylo pouze znovu vytvořit definer tak, aby existoval, pokud nebude vytvářet konflikty s existujícími uživateli.
CREATE USER 'root'@'foobar';
Exportovat všechna zobrazení databáze <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
nebo:
mysql -BNe "SELECT TABLE_NAME FROM VIEWS WHERE TABLE_SCHEMA = '<DB>'" \
information_schema | xargs mysqldump --single-transaction --no-data <DB> >views.sql
Upravit views.sql
a znovu je vytvořte:
cat views.sql | mysql <DB>
Určete -u
a -p
v případě potřeby přepne.