sql >> Databasteknik >  >> RDS >> Mysql

Kan MySQL på ett tillförlitligt sätt återställa säkerhetskopior som innehåller vyer eller inte?

Den här frågan är lite gammal, men jag har bara slösat bort ett par timmar på att försöka lösa exakt samma problem, så jag antar att en tydlig förklaring kan vara till nytta för någon i framtiden...

För att komma till rätta:Problemet finns i DEFINER-fältet i din mysql-dump. Det ser ut ungefär som:

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

Problemet är att denna *[email protected] * kommer alltid att hårdkodas till användarkontot som användes för att skapa vyn i den ursprungliga DB och NOT användaren som du har använt för att exportera eller importera databasen som man kan förvänta sig (eller åtminstone jag gjorde det). Och senare, under importen, kommer denna användare att användas för att återskapa vyn.

Så du kan exportera/importera som root, men om den ursprungliga DB körs under en annan användare och den inte har några CREATE VIEW-rättigheter i den nya databasen, kommer importen att misslyckas.

Du har två enkla lösningar:

  1. Sök och ersätt alla referenser till some_user @localhost i din dumpfil med din nya användare (den du använder för att importera dumpen, t.ex. exempel@ sqldat.com )
  2. Eller så kan du ge *någon_användare* lämpliga rättigheter till den nya databasen så att vyer kan skapas under hans konto

Oavsett vilket kommer att lösa problemet, men jag tror att det första tillvägagångssättet är mycket bättre och renare, eftersom du inte behöver oroa dig för flera användare i framtiden.



  1. Hur man får uppgifter om aktuell månad i MySQL

  2. Exportera Oracle Table till Excel-kalkylblad

  3. Hur man tar bort ledande blanksteg i MySQL

  4. Ska jag använda en stor SQL Select-sats eller flera små?