it-swarm.it

Come posso cambiare il DEFINER di una VISTA in Mysql?

Quando eseguo mysqldump, viene visualizzato un errore:

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

Questo ha senso perché foobar è una macchina legacy che non esiste più.

Come posso modificare il definitore di tutte le mie tabelle in "root" @ "localhost"?

36
kfmfe04

Quello che penso è che il database che si sta tentando di scaricare contiene procedure/metodi che sono stati definiti da un utente durante l'accesso come root @ 'foobar'.

Ora la soluzione è che devi sostituire il definitore per tali procedure/metodi

quindi è possibile generare il dump senza l'errore.

puoi farlo come ..

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

Fai attenzione, perché questo cambierà tutti i definitori per tutti i database.

Provalo....!

AGGIORNAMENTO il 9 febbraio 2012

Come ho visto il link fornito da @gbn che è una risposta data da @Rolando che può anche essere il caso. Visita il link

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

Sebbene rischiosa, questa risposta è buona. Solo per chiarire: è possibile specificare il database nella query in questo modo:

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

Più facile da usare il --single-transaction interruttore:

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

La soluzione più rapida sarebbe semplicemente ricreare il definitore in modo che esista, purché non crei conflitti con gli utenti esistenti.

CREATE USER 'root'@'foobar';

18
ColinM

Esporta tutte le visualizzazioni del database <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

o:

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

Modificare views.sql e ricrearli:

cat views.sql | mysql <DB>

Specifica -u e -p cambia se necessario.

5
x-yuri