Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL può ripristinare in modo affidabile backup che contengono viste o meno?

Questa domanda è un po' vecchia, ma ho appena perso un paio d'ore cercando di risolvere esattamente lo stesso problema, quindi immagino che una spiegazione chiara potrebbe tornare utile a qualcuno in futuro...

Per andare al sodo:il problema è nel campo DEFINER nel tuo dump di MySQL. Assomiglia a:

/*!50013 DEFINER=`some_user`@`localhost` SQL SECURITY DEFINER */

Il problema è che questo *[email protected] * sarà sempre hardcoded nell'account utente utilizzato per creare la vista nel DB originale e NON l'utente che hai utilizzato per esportare o importare il database come ci si aspetterebbe (o almeno l'ho fatto). E successivamente, durante l'importazione, questo utente verrà utilizzato per ricreare la vista.

Quindi puoi esportare/importare come root, ma se il DB originale è in esecuzione con un altro utente e non ha i diritti CREATE VIEW nel nuovo database, l'importazione avrà esito negativo.

Hai due semplici soluzioni:

  1. Cerca e sostituisci tutti i riferimenti a some_user @localhost nel tuo file di dump con il tuo nuovo utente (quello che usi per importare il dump, ad es. example@ sqldat.com )
  2. Oppure puoi concedere a *some_user* i diritti appropriati sul nuovo database in modo che le viste possano essere create con il suo account

In entrambi i casi si risolverà il problema, ma penso che il primo approccio sia molto migliore e più pulito, poiché non devi preoccuparti di più utenti in futuro.