sql >> Database >  >> RDS >> Mysql

Kan MySQL op betrouwbare wijze back-ups herstellen die views bevatten of niet?

Deze vraag is een beetje oud, maar ik heb net een paar uur verspild met het proberen om precies hetzelfde probleem op te lossen, dus ik denk dat een duidelijke uitleg in de toekomst van pas kan komen voor iemand...

Om maar meteen met de deur in huis te vallen:het probleem zit in het DEFINER-veld in je mysql-dump. Het ziet er ongeveer zo uit:

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

Het probleem is dat dit *[email protected] * wordt altijd hardgecodeerd naar het gebruikersaccount dat werd gebruikt om de weergave in de oorspronkelijke DB te maken en NIET de gebruiker die je hebt gebruikt om de database te exporteren of importeren zoals je zou verwachten (of dat deed ik tenminste). En later, tijdens het importeren, wordt deze gebruiker gebruikt om de weergave opnieuw te maken.

U kunt dus exporteren/importeren als root, maar als de oorspronkelijke DB onder een andere gebruiker draait en deze geen CREATE VIEW-rechten heeft in de nieuwe database, zal de import mislukken.

Je hebt twee simpele oplossingen:

  1. Zoek en vervang alle verwijzingen naar some_user @localhost in uw dumpbestand met uw nieuwe gebruiker (degene die u gebruikt om de dump te importeren, bijv. example@ sqldat.com )
  2. Of je kunt *some_user* de juiste rechten verlenen op de nieuwe database zodat views kunnen worden aangemaakt onder zijn account

Hoe dan ook, het probleem wordt opgelost, maar ik denk dat de eerste benadering veel beter en schoner is, omdat je je in de toekomst geen zorgen hoeft te maken over meerdere gebruikers.



  1. Hoe te updaten van select met een Join

  2. voeg een tijdelijke kolom toe met een waarde

  3. F# error 'error FS0039:De naamruimte of module 'MySql' is niet gedefinieerd'?

  4. mysql voor python 2. 7 zegt Python v2.7 niet gevonden