it-swarm-eu.dev

Jak změním DEFINER VIEW v Mysqlu?

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'?

36
kfmfe04

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';
33
Abdul Manaf

Snadnější použití --single-transaction přepínač:

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

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';

18
ColinM

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.

5
x-yuri